﻿using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Text;
using static Free.Ports.zLib.zlib;
using GarboDev;

public unsafe class GlobalMembers:arms
{
	public static uint _addr_bits(uint inst)
	{
		uint bits = 0;
		for (int i = 0; i < 16; i++)
		{
	
			if ((((inst >> i) & 0b0001)) != 0)
			{
				bits++;
			}
		}
		return bits;
	}
	//         I
	//cond 0 0 0 opcode S Rn Rd Rs 0 0 0 1 Rm
	//cond 0 0 0 opcode S Rn Rd Rs 0 0 1 1 Rm
	//cond 0 0 0 opcode S Rn Rd Rs 0 1 0 1 Rm
	//cond 0 0 0 opcode S Rn Rd Rs 0 1 1 1 Rm
	//cond 0 0 0 opcode S Rn Rd shift_imm 0 0 0 Rm
	//cond 0 0 0 opcode S Rn Rd 0 0 0 0 0 0 0 0 Rm	//shift_imm=0而已，跟上一种一样的处理
	//cond 0 0 0 opcode S Rn Rd shift_imm 0 1 0 Rm
	//cond 0 0 0 opcode S Rn Rd shift_imm 1 0 0 Rm
	//cond 0 0 0 opcode S Rn Rd shift_imm 1 1 0 Rm
	//cond 0 0 0 opcode S Rn Rd 0 0 0 0 0 1 1 0 Rm	//shift_imm=0而已，跟上一种一样的处理
	//cond 0 0 1 opcode S Rn Rd rotate_imm immed_8
	public static uint addr_mode_1(cpu_state_t st, uint inst, ref bool carry)
	{
		//这两个变量用来返回
		uint shifter_operand=0;
        //bool shifter_carry_out=false;
        bool shifter_carry_out = false;
        //取得指令的I位(25)
        uint I = (((inst) >> (25)) & 0b1);
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		//如果I位为1表示立即数偏移
		if (I == 1)
		{
			uint immed8 = (((inst) << ((32) - (0 + 7) - 1)) >> ((32) - (0 + 7) - 1 + (0)));
			uint imm = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
			shifter_operand = (((immed8) >> (int)(imm << 1)) | ((immed8) << (int)((32 - (imm << 1))))); //imm*2
			if (imm == 0)
			{
				shifter_carry_out = st.cpsr.c;
			}
			else
			{
				shifter_carry_out = (shifter_operand >> 31) != 0;
			}
        }
		//否则表示寄存器偏移（需要保证不是扩展指令集）
		else
		{
			//取4、5、6作为识别码
			uint icode = (((inst) << ((32) - (6) - 1)) >> ((32) - (6) - 1 + (4)));
			//取得Rm和shift
			uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
			uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
			uint rs07 = (st.registers[rs]) & 0x00ff;
			uint rs04 = (st.registers[rs]) & 0x000f;
			uint shift_imm = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (7)));
			switch (icode)
			{
	
			case 0b000:
				if (shift_imm == 0)
				{
					shifter_operand = (st.registers[rm]);
					shifter_carry_out = st.cpsr.c;
				}
				else
				{
					shifter_operand = ((uint)((st.registers[rm])) << (int)(shift_imm));
	
					shifter_carry_out = (((st.registers[rm]) >> (int)(32 - shift_imm)) & 0b01)!=0;
				}
				break;
	
			case 0b001:
				if (rs07 == 0)
				{
					shifter_operand = (st.registers[rm]);
					shifter_carry_out = st.cpsr.c;
				}
				else if (rs07 < 32)
				{
					shifter_operand = ((uint)((st.registers[rm])) << (int)(rs07));
                      //  shifter_operand = (((st.registers[rm]) >> (int)(32 - rs07)) & 0b01);
                    shifter_carry_out = (((st.registers[rm]) >> (int)(32 - rs07)) & 0b01)!=0;
                    }
				else if (rs07 == 32)
				{
					shifter_operand = 0;
	
					shifter_carry_out = ((st.registers[rm]) & 0b01)!=0;
				}
				else
				{
					shifter_operand = 0;
					shifter_carry_out = false;
				}
				break;
	
			case 0b010:
				if (shift_imm == 0)
				{
					shifter_operand = 0;
					shifter_carry_out = ((st.registers[rm]) >> 31)!=0;
				}
				else
				{
					shifter_operand = ((uint)((st.registers[rm])) >> (int)(shift_imm));
	
					shifter_carry_out = (((st.registers[rm]) >> (int)(shift_imm - 1)) & 0b01)!=0;
				}
				break;
	
			case 0b011:
				if (rs07 == 0)
				{
					shifter_operand = (st.registers[rm]);
					shifter_carry_out = st.cpsr.c;
				}
				else if (rs07 < 32)
				{
					shifter_operand = ((uint)((st.registers[rm])) >> (int)(rs07));
	
					shifter_carry_out = (((st.registers[rm]) >> (int)((rs07 - 1)) & 0b01))!=0;
				}
				else if (rs07 == 32)
				{
					shifter_operand = 0;
					shifter_carry_out = ((st.registers[rm]) >> 31)!=0;
				}
				else
				{
					shifter_operand = 0;
					shifter_carry_out = false;
				}
				break;
	
			case 0b100:
				if (shift_imm == 0)
				{
					uint rm31 = (st.registers[rm]) >> 31;
					if (rm31 == 0)
					{
						shifter_operand = 0;
						shifter_carry_out = rm31!=0;
					}
					else
					{
						shifter_operand = 0xffffffff;
						shifter_carry_out = rm31!=0;
					}
				}
				else
				{
					shifter_operand = (uint)((int)((st.registers[rm])) >> (int)(shift_imm));
                        shifter_carry_out = (((st.registers[rm]) << (int)(shift_imm - 1)) & 0b01) != 0;
				}
				break;
	
			case 0b101:
				if (rs07 == 0)
				{
					shifter_operand = (st.registers[rm]);
					shifter_carry_out = st.cpsr.c;
				}
				else if (rs07 < 32)
				{
					shifter_operand = (uint)((int)((st.registers[rm])) >> (int)(rs07));
	
					shifter_carry_out = (((st.registers[rm]) >> (int)(rs07 - 1)) & 0b01) != 0;
				}
				else
				{
					uint rm31 = (st.registers[rm]) >> 31;
					if (rm31 == 0)
					{
						shifter_operand = 0;
						shifter_carry_out = rm31!=0;
					}
					else
					{
						shifter_operand = 0xffffffff;
						shifter_carry_out = rm31!=0;
					}
				}
				break;
	
			case 0b110:
				if (shift_imm == 0)
				{
					shifter_operand = ((uint)((uint)(st.cpsr.c ? 1 : 0)) << (31)) | ((uint)((st.registers[rm])) >> (1));
	
					shifter_carry_out = ((st.registers[rm]) & 0b01) != 0;
				}
				else
				{
					shifter_operand = (((uint)((st.registers[rm])) >>(int) (shift_imm)) | ((uint)((st.registers[rm])) << (int)((32 - (shift_imm)))));
	
					shifter_carry_out = (((st.registers[rm]) >> (int)(shift_imm - 1)) & 0b01) != 0;
				}
				break;
	
			case 0b111:
				if (rs07 == 0)
				{
					shifter_operand = (st.registers[rm]);
					shifter_carry_out = st.cpsr.c;
				}
				else if (rs04 == 0)
				{
					shifter_operand = (st.registers[rm]);
					shifter_carry_out = ((st.registers[rm]) >> 31) != 0;
				}
				else
				{
					shifter_operand = (((uint)((st.registers[rm])) >> (int)(rs04)) | ((uint)((st.registers[rm])) << (int)((32 - (rs04)))));
	
					shifter_carry_out =( ((st.registers[rm]) >> (int)(rs04 - 1)) & 0b01) != 0;
				}
				break;
			}
		}
		//特别处理pc
		if (rn == DefineConstants.r_pc)
		{
			shifter_operand += 4; //文档是+8的，不过这里不一样
		}
		//OK，返回结果
		if (carry)
		{
			carry = shifter_carry_out;
		}
		return shifter_operand;
	}
	//         I P U B W L
	//cond 0 1 0 1 U B 0 L Rn Rd offset_12
	//cond 0 1 0 1 U B 1 L Rn Rd offset_12
	//cond 0 1 0 0 U B 0 L Rn Rd offset_12
	//cond 0 1 1 1 U B 0 L Rn Rd 0 0 0 0 0 0 0 0 Rm
	//cond 0 1 1 1 U B 0 L Rn Rd shift_imm shift 0 Rm
	//cond 0 1 1 1 U B 1 L Rn Rd 0 0 0 0 0 0 0 0 Rm
	//cond 0 1 1 1 U B 1 L Rn Rd shift_imm shift 0 Rm
	//cond 0 1 1 0 U B 0 L Rn Rd 0 0 0 0 0 0 0 0 Rm
	//cond 0 1 1 0 U B 0 L Rn Rd shift_imm shift 0 Rm
	public static uint addr_mode_2(cpu_state_t st, uint inst)
	{
	
		uint I = (((inst) >> (25)) & 0b1);
	
		uint P = (((inst) >> (24)) & 0b1);
	
		uint U = (((inst) >> (23)) & 0b1);

        uint B = (((inst) >> (22)) & 0b1);

        uint W = (((inst) >> (21)) & 0b1);
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint address;
		// if (rn == r_pc && P == 1 && W == 0)
		// {
		// 	address = st->registers[r_pc];// + 8;
		// }
		// else
		// {
		//立即数偏移
		if (I == 0)
		{
			uint offset_12 = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (0)));
			if (P == 0)
			{
				address = st.registers[rn];
				st.registers[rn] = (U == 1) ? st.registers[rn] + offset_12 : st.registers[rn] - offset_12;
			}
			else
			{
				address = (U == 1) ? st.registers[rn] + offset_12 : st.registers[rn] - offset_12;
				if (W != 0)
				{
					st.registers[rn] = address;
				}
			}
		}
		//寄存器偏移
		else
		{
			uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
			uint not0 = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (4))); //表示4-11位非全0
			uint shift = (((inst) << ((32) - (6) - 1)) >> ((32) - (6) - 1 + (5)));
			uint shift_imm = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (7)));
			uint index=0;
			if (P == 0) //p==0 w==0
			{
				address = st.registers[rn];
				if (not0 != 0)
				{
					switch (shift)
					{
	
					case 0:
						index = ((uint)(st.registers[rm]) << (int)(shift_imm));
							break;
	
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not allow fall-through from a non-empty 'case':
					case 1:
						if (shift_imm == 0) // LSR #32
						{
							index = 0;
						}
						else
						{
							index = ((uint)(st.registers[rm]) >> (int)(shift_imm));
						}
						break;
	
					case 2:
						if (shift_imm == 0) // ASR #32
						{
							//if (st.registers[rm] >> 31 != 0)
							//{
							//	index = 0xFFFFFFFF;
							//}
							//else
							//{
							//	index = 0;
							//}
                                index = (uint)((int)st.registers[rm] >> 31);
						}
						else
						{
							index = (uint)((int)(rm) >> (int)(shift_imm));
						}
						break;
	
					case 3:
						if (shift_imm == 0) // RRX
						{
							index = ((uint)(st.cpsr.c ? 1 : 0) << (31)) | ((uint)(st.registers[rm]) >> (1));
						}
						else // ROR
						{
							index = (((uint)(st.registers[rm]) >> (int)(shift_imm)) | ((uint)(st.registers[rm]) << (int)((32 - (shift_imm)))));
						}
						break;
					}
					st.registers[rn] = (U == 1) ? st.registers[rn] + index : st.registers[rn] - index;
				}
				else
				{
					st.registers[rn] = (U == 1) ? st.registers[rn] + st.registers[rm] : st.registers[rn] - st.registers[rm];
				}
			}
			else if (W == 0) //p==1 w==0
			{
				if (not0 != 0)
				{
					switch (shift)
					{
	
					case 0b00:
						index = ((uint)(st.registers[rm]) << (int)(shift_imm));
						break;
	
					case 0b01:
						if (shift_imm == 0) // LSR #32
						{
							index = 0;
						}
						else
						{
							index = ((uint)(st.registers[rm]) >> (int)(shift_imm));
						}
						break;
	
					case 0b10:
						if (shift_imm == 0) // ASR #32
						{
							//if (st.registers[rm] >> 31 != 0)
							//{
							//	index = 0xFFFFFFFF;
							//}
							//else
							//{
							//	index = 0;
							//}
                                index = (uint)((int)st.registers[rm] >> 31);
                        }
						else
						{
							index = (uint)((int)(st.registers[rm]) >> (int)(shift_imm));
						}
						break;
	
					case 0b11:
						if (shift_imm == 0) // RRX
						{
							index = ((uint)(st.cpsr.c?1:0) << (31)) | ((uint)(st.registers[rm]) >> (1));
						}
						else // ROR
						{
							index = (((uint)(st.registers[rm]) >> (int)(shift_imm)) | ((uint)(st.registers[rm]) << (int)((32 - (shift_imm)))));
						}
						break;
					}
					address = (U == 1) ? st.registers[rn] + index : st.registers[rn] - index;
				}
				else
				{
					address = (U == 1) ? st.registers[rn] + st.registers[rm] : st.registers[rn] - st.registers[rm];
				}
			}
			else //p==1 w==1
			{
				if (not0 != 0)
				{
					switch (shift)
					{
	
					case 0b00:
						index = ((uint)(st.registers[rm]) << (int)(shift_imm));
							break;
	
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not allow fall-through from a non-empty 'case':
					case 0b01:
						if (shift_imm == 0) // LSR #32
						{
							index = 0;
						}
						else
						{
							index = ((uint)(st.registers[rm]) >> (int)(shift_imm));
						}
						break;
	
					case 0b10:
						if (shift_imm == 0) // ASR #32
						{
							//if (st.registers[rm] >> 31 != 0)
							//{
							//	index = 0xFFFFFFFF;
							//}
							//else
							//{
							//	index = 0;
							//}
                                index = (uint)((int)st.registers[rm] >> 31);
                        }
						else
						{
							index = (uint)((int)(st.registers[rm]) >> (int)(shift_imm));
						}
						break;
	
					case 0b11:
						if (shift_imm == 0) // RRX
						{
							index = ((uint)(st.cpsr.c?1:0) << (31)) | ((uint)(st.registers[rm]) >> (1));
						}
						else // ROR
						{
							index = (((uint)(st.registers[rm]) >> (int)(shift_imm)) | ((uint)(st.registers[rm]) << ((32 - (int)(shift_imm)))));
						}
						break;
					}
					address = (U == 1) ? st.registers[rn] + index : st.registers[rn] - index;
				}
				else
				{
					address = (U == 1) ? st.registers[rn] + st.registers[rm] : st.registers[rn] - st.registers[rm];
				}
				//写回
				st.registers[rn] = address;
			}
		}
		if (rn == DefineConstants.r_pc)
		{
			address += 4;
		}
		// }
		//最终返回地址
		return address;
	}
	//           P U I W
	//cond 0 0 0 1 U 1 0 L Rn Rd immedH 1 S H 1 immedL
	//cond 0 0 0 1 U 1 1 L Rn Rd immedH 1 S H 1 ImmedL
	//cond 0 0 0 0 U 1 0 L Rn Rd immedH 1 S H 1 ImmedL
	//cond 0 0 0 1 U 0 0 L Rn Rd SBZ 1 S H 1 Rm
	//cond 0 0 0 1 U 0 1 L Rn Rd SBZ 1 S H 1 Rm
	//cond 0 0 0 0 U 0 0 L Rn Rd SBZ 1 S H 1 Rm
	public static uint addr_mode_3(cpu_state_t st, uint inst)
	{
	
		uint p = (((inst) >> (24)) & 0b1);
	
		uint u = (((inst) >> (23)) & 0b1);
	
		uint i = (((inst) >> (22)) & 0b1);
	
		uint w = (((inst) >> (21)) & 0b1);
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint pw = (p << 1) | w; //pw的组合
		uint address=0;
		//立即数偏移
		if (i == 1)
		{
			uint immh = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
			uint imml = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
			uint offset_8 = (immh << 4) | imml;
	
			if (pw == 0b00)
			{
				address = st.registers[rn];
				st.registers[rn] = (u == 1) ? st.registers[rn] + offset_8 : st.registers[rn] - offset_8;
			}
	
			else if (pw == 0b10)
			{
				address = (u == 1) ? st.registers[rn] + offset_8 : st.registers[rn] - offset_8;
			}
	
			else if (pw == 0b11)
			{
				address = (u == 1) ? st.registers[rn] + offset_8 : st.registers[rn] - offset_8;
				st.registers[rn] = address;
			}
			//其他是错的
		}
		//寄存器偏移
		else
		{
			uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
			if (pw == 0b00)
			{
				address = st.registers[rn];
				st.registers[rn] = (u == 1) ? st.registers[rn] + st.registers[rm] : st.registers[rn] - st.registers[rm];
			}
	
			else if (pw == 0b10)
			{
				address = (u == 1) ? st.registers[rn] + st.registers[rm] : st.registers[rn] - st.registers[rm];
			}
	
			else if (pw == 0b11)
			{
				address = (u == 1) ? st.registers[rn] + st.registers[rm] : st.registers[rn] - st.registers[rm];
				st.registers[rn] = address;
			}
			//其他是错的
		}
		if (rn == DefineConstants.r_pc)
		{
			address += 4;
		}
		//把地址返回出去
		return address;
	}

	//cond 1 0 0 0 0 S W L Rn register list
	//cond 1 0 0 0 1 S W L Rn register list
	//cond 1 0 0 1 0 S W L Rn register list
	//cond 1 0 0 1 1 S W L Rn register list
	public static void addr_mode_4(cpu_state_t st, uint inst, ref uint start_address, ref uint end_address,bool L=true)
	{
        uint pu = inst_bm(inst,23,24);
		//uint pu = (((inst) << ((32) - (24) - 1)) >> ((32) - (24) - 1 + (23)));
		//uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rn = inst_b4(inst,16);
        bool U = inst_b1(inst, 23)!=0;
        bool P = inst_b1(inst, 24) != 0;
        //uint w = (((inst) >> (21)) & 0b1);
        uint w = inst_b1(inst,21);
        uint registers_list = (((inst) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		uint reg_bits = _addr_bits(registers_list); //计算总共有设置了多少个寄存器
        //reg_bits = Thumb.BitOperations.PopCount(inst & 0xFFFF);
        if (pu == 0)//00
        {
            start_address = st.registers[rn] - (reg_bits * 4) + 4;
            end_address = st.registers[rn];
            if (w == 1)
            {
                st.registers[rn] -= (reg_bits * 4);
            }
        }

        else if (pu == 1)//01
        {
            start_address = st.registers[rn];
            end_address = st.registers[rn] + (reg_bits * 4) - 4;
            if (w == 1)
            {
                st.registers[rn] += (reg_bits * 4);
            }
        }

        else if (pu == 2)//10
        {
            //start_address = st.registers[rn] - (reg_bits * 4);
            start_address = st.registers[rn] - (reg_bits * 4);
            end_address = st.registers[rn] - 4;
            if (w == 1)
            {
                st.registers[rn] -= (reg_bits * 4);
            }
        }
        else//pu 11
        {
            start_address = st.registers[rn] + 4;
            end_address = st.registers[rn] + (reg_bits * 4);
            if (w == 1)
            {
                st.registers[rn] += (reg_bits * 4);
            }
        }

        if(reg_bits >= 16)
        {

        }
        bool emptyRlist = (inst & 0xFFFF) == 0;
        if (emptyRlist)
        {
            if (L)
            {
                if (U)
                {

                }
            }
            else
            {
                if (P)
                {
                    if (U)
                    {

                    }
                }
                else
                {
                    if (U)
                    {

                    }
                }
            }
        }
        
    }

    public static bool check_cond(cpu_state_t st, uint inst)
	{
		//条件检测
		switch (inst >> 28)
		{
		case 0x00000000: //eq
			return st.cpsr.z;
		case 0x00000001: //ne
			return !st.cpsr.z;
		case 0x00000002: //cs/hs
			return st.cpsr.c;
		case 0x00000003: //cc/lo
			return !st.cpsr.c;
		case 0x00000004: //mi
			return st.cpsr.n;
		case 0x00000005: //pl
			return !st.cpsr.n;
		case 0x00000006: //vs
			return st.cpsr.v;
		case 0x00000007: //vc
			return !st.cpsr.v;
		case 0x00000008: //hi
			return st.cpsr.c && !st.cpsr.z;
		case 0x00000009: //ls
			return !st.cpsr.c || st.cpsr.z;
		case 0x0000000a: //ge
			return st.cpsr.n == st.cpsr.v;
		case 0x0000000b: //lt
			return st.cpsr.n != st.cpsr.v;
		case 0x0000000c: //gt
			return !st.cpsr.z && st.cpsr.n == st.cpsr.v;
		case 0x0000000d: //le
			return st.cpsr.z || st.cpsr.n != st.cpsr.v;
		case 0x0000000e:
			return true;
		default:
			return false;
		}
	}
	
	public static int signed_sat(long val, int n, ref bool issat)
	{
		int pown = powl(2, n - 1);
		int pown1 = pown - 1;
		if (val < -pown)
		{
			issat = true;
			return -pown;
		}
		else if (val > pown1)
		{
			issat = true;
			return pown1;
		}
		else
		{
			issat = false;
			return (int)val;
		}
	}
	public static uint unsigned_sat(long val, uint n, ref bool issat)
	{
		int pown = powl(2, n);
		int pown1 = pown - 1;
		if (val < 0)
		{
			issat = true;
			return 0;
		}
		else if (val > pown1)
		{
			issat = true;
			return (uint)pown1;
		}
		else
		{
			issat = false;
			return (uint)val;
		}
	}
	
	//adc指令
	public static int arm_inst_adc(cpu_state_t st, uint inst)
	{
		loginst("adc", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//必要值
	
		uint s = (((inst) >> (20)) & 0b1);
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		bool b = false;
		uint operand = addr_mode_1(st, inst, ref b);
        //计算
        uint rnValue = st.registers[rn];
        uint result = (st.registers[rd]) = rnValue + operand + (st.cpsr.c?1u:0u) ;
		if (s == 1 && rd == 15)
		{
			//TODO 这种情况暂时不处理
		}
		else if (s == 1)
		{
			st.cpsr.n = (result >> 31) != 0;
			st.cpsr.z = result == 0;
			st.cpsr.c = ((result) < (rnValue));
			st.cpsr.v = ((((result) ^ (rnValue)) & ((result) ^ (operand)) & 0x80000000)) != 0;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	//adc指令
	public static int arm_inst_add(cpu_state_t st, uint inst)
	{
		loginst("add", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//必要值
	
		uint s = (((inst) >> (20)) & 0b1);
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		bool b = false;
		uint operand = addr_mode_1(st, inst, ref b);
        //计算
        uint rnValue = st.registers[rn];
        uint result = (st.registers[rd]) = rnValue + operand;
		if (s == 1 && rd == 15)
		{
			//TODO 这种情况暂时不处理
		}
		else if (s == 1)
		{
			st.cpsr.n = (result >> 31) != 0; 
			st.cpsr.z = result == 0;
			st.cpsr.c = ((result) < (rnValue));
			st.cpsr.v = (((result) ^ (rnValue)) & ((result) ^ (operand)) & 0x80000000) != 0;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	//adc指令
	public static int arm_inst_and(cpu_state_t st, uint inst)
	{
		loginst("and", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//必要值
	
		uint s = (((inst) >> (20)) & 0b1);
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		bool carry=true;
		uint operand = addr_mode_1(st, inst, ref carry);
		//计算
		uint result = (st.registers[rd]) = (st.registers[rn]) & operand;
		if (s == 1 && rd == 15)
		{
			//TODO 这种情况暂时不处理
		}
		else if (s == 1)
		{
			st.cpsr.n = (result >> 31) != 0;
			st.cpsr.z = result == 0;
			st.cpsr.c = carry;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_b_bl(cpu_state_t st, uint inst)
	{
        var imm24 = inst & 0x00ffffff;
        uint l = (((inst) >> (24)) & 0b1);
		//loginst((l != 0 ? "bl" : "b")+ "  imm24:" + imm24, inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//如果是bl的话，需要保存下一条指令的地址
		if (l == 1)
		{
			st.registers[DefineConstants.r_lr] = st.registers[DefineConstants.r_pc]; //在执行指令时，经过了取指令的过程，那时就已经指向了下一条，因此直接赋值即可
		}
		//跳转
		//int offset = (((int)((inst) << (32 - (24)))) >> (32 - (24))); //扩展为有符号32位证书
        int offset = (int)(inst << 8) >> 8; //扩展为有符号32位证书

        
        var imm26 = imm24 << 2;
        var imm32 = imm26;
        if ((imm26 & 0x02000000)!=0)
            imm32 = imm26 | 0xfc000000;
        var m = inst & 0xf;
        st.registers[DefineConstants.r_pc] = (uint)((offset << 2) + 4+ st.registers[DefineConstants.r_pc]); //注意需要+4
                                                                                                            //OK
        return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_bic(cpu_state_t st, uint inst)
	{
		loginst("bic", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//必要值
	
		uint s = (((inst) >> (20)) & 0b1);
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		bool carry=true;
		uint operand = addr_mode_1(st, inst, ref carry);
		//计算
		uint result = st.registers[rd] = st.registers[rn] & (~operand);
		if (s == 1 && rd == 15)
		{
			//TODO 这种情况暂时不处理
		}
		else if (s == 1)
		{
			st.cpsr.n = (result >> 31) != 0;
			st.cpsr.z = result == 0;
			st.cpsr.c = carry;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_blx_1(cpu_state_t st, uint inst)
	{
        var imm24 = inst & 0x00ffffff;
        var imm26 = imm24 << 2;
        var imm32 = imm26;
        if ((imm26 & 0x02000000) != 0)
            imm32 = imm26 | 0xfc000000;
        
        loginst("blx(1)", inst);
		uint h = (((inst) >> (24)) & 0b1);
		//保存地址
		st.registers[DefineConstants.r_lr] = st.registers[DefineConstants.r_pc];
		//切换到thumb模式
		st.cpsr.t = true;
		//跳转
		int offset = (((int)inst << 8) >> 8);
		st.registers[DefineConstants.r_pc] += (uint)((offset << 2) + (h << 1) + 4); //要+4
		//OK
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_blx_2(cpu_state_t st, uint inst)
	{
		loginst("blx(2)", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//处理sbo1-3
		if ((((inst) << ((32) - (19) - 1)) >> ((32) - (19) - 1 + (8))) != 0x0fff)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		//跳转
		uint target = st.registers[rm];
		st.registers[DefineConstants.r_lr] = st.registers[DefineConstants.r_pc]; //保存pc
		st.cpsr.t = (target & 0x0001) != 0;  //将target第0位设置到thumb标志
		st.registers[DefineConstants.r_pc] = target & 0xFFFFFFFE; //跳转
		//OK
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_brpt(cpu_state_t st, uint inst)
	{
		loginst("*brpt", inst);
		return DefineConstants.EXEC_NOT_IMPL;
	}
	public static int arm_inst_bx(cpu_state_t st, uint inst)
	{
		loginst("bx", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//处理sbo1-3
		if ((((inst) << ((32) - (19) - 1)) >> ((32) - (19) - 1 + (8))) != 0x0fff)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		//跳转
		uint target = st.registers[rm];
		st.cpsr.t = (target & 0x0001) != 0;  //将target第0位设置到thumb标志
		st.registers[DefineConstants.r_pc] = target & 0xFFFFFFFE; //跳转
		//OK
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_bxj(cpu_state_t st, uint inst)
	{
		loginst("bxj", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//处理sbo1-3
		if ((((inst) << ((32) - (19) - 1)) >> ((32) - (19) - 1 + (8))) != 0x0fff)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		//TODO 这里就和bx命令的实现一样吧，以后有必要在具体实现。
		//跳转
		uint target = st.registers[rm];
		st.cpsr.t = (target & 0x0001) != 0; //将target第0位设置到thumb标志
		st.registers[DefineConstants.r_pc] = target & 0xFFFFFFFE; //跳转
		//OK
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_cdp(cpu_state_t st, uint inst)
	{
		loginst("*cdp", inst);
		return DefineConstants.EXEC_NOT_IMPL;
	}
	
	
	public static int arm_inst_clz(cpu_state_t st, uint inst)
	{
		loginst("clz", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo1-2
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0x0f || (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		//计算前导0数量
		if (st.registers[rm] == 0) //如果都是0的话，自然就是32咯
		{
			st.registers[rd] = 32;
		}
		else //否则的话就要逐个计算了
		{
			int count;
			uint rmv = st.registers[rm];
			for (count = 32; rmv > 0; count--)
			{
				rmv = rmv >> 1;
			}
			st.registers[rd] = (uint)count;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_cmn(cpu_state_t st, uint inst)
	{
		loginst("cmn", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		bool b = false;
		uint operand = addr_mode_1(st, inst, ref b);
		uint result = (st.registers[rn]) + operand;
		st.cpsr.n = (result >> 31) != 0;
		st.cpsr.z = result == 0;
		st.cpsr.c = ((result) < ((st.registers[rn])));
		st.cpsr.v = (((result) ^ ((st.registers[rn]))) & ((result) ^ (operand)) & 0x80000000) != 0;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_cmp(cpu_state_t st, uint inst)
	{
		loginst("cmp", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		bool b = false;
		uint operand = addr_mode_1(st, inst, ref b);
		uint result = (st.registers[rn]) - operand;
		st.cpsr.n = (result >> 31) != 0;
		st.cpsr.z = result == 0;
		st.cpsr.c = (st.registers[rn]) >= operand; //!borrow(result, regv(rn));
		st.cpsr.v = ((((st.registers[rn])) ^ (result)) & (((st.registers[rn])) ^ (operand)) & 0x80000000) != 0;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_cps(cpu_state_t st, uint inst)
	{
		loginst("cps", inst);
		uint imod = (((inst) << ((32) - (19) - 1)) >> ((32) - (19) - 1 + (18)));
	
		uint mmod = (((inst) >> (17)) & 0b1);
		if ((imod >> 1) == 1) //如果imode的第一位是1的话，会改变cpsr的A、I、F位
		{
			//TODO 这里暂时不做实现
		}
		if (mmod == 1) //如果mmod为1的话，则需要改变CPU的模式
		{
			//TODO 由于目前只有用户模式，所以不做改变
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_cpy(cpu_state_t st, uint inst)
	{
		loginst("cpy", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		st.registers[rd] = st.registers[rm];
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_eor(cpu_state_t st, uint inst)
	{
		loginst("eor", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//必要值
	
		uint s = (((inst) >> (20)) & 0b1);
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		bool carry=true;
		uint operand = addr_mode_1(st, inst, ref carry);
		//计算
		uint result = st.registers[rd] = st.registers[rn] ^ operand;
		if (s == 1 && rd == 15)
		{
			//TODO 这种情况暂时不处理
		}
		else if (s == 1)
		{
			st.cpsr.n = (result >> 31) != 0;
			st.cpsr.z = result == 0;
			st.cpsr.c = carry;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_ldc(cpu_state_t st, uint inst)
	{
		loginst("*ldc", inst);
		return DefineConstants.EXEC_NOT_IMPL;
	}
	
	public static int arm_inst_ldm_1(cpu_state_t st, uint inst)
	{
		loginst("ldm(1)", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//rn不能是pc
		if (((inst >> 16) & 0x000f) == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//TODO 先进行内存检测
		//计算地址
		uint start_address=0;
		uint end_address=0;
		addr_mode_4(st, inst, ref start_address, ref end_address);
		uint address = start_address;
		for (uint i = 0; i <= 14; i++)
		{
	
			if ((((inst >> (int)i) & 0b0001)) != 0)
			{
				st.registers[i] = mem_ld32(st.mem, address);
				address = address + 4;
			}
		}
	
		if ((((inst >> DefineConstants.r_pc) & 0b0001)) != 0)
		{
			uint value = mem_ld32(st.mem, address);
			//对值进行处理
			//不使用这种方式
			// st->registers[r_pc] = value & 0xFFFFFFFE;
			 st.cpsr.t = (value & 0x0001)!=0;
			//否则呢
			st.registers[DefineConstants.r_pc] = value & 0xFFFFFFFC;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_ldm_2(cpu_state_t st, uint inst)
	{
		loginst("ldm2", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//rn不能是pc
		if (((inst >> 16) & 0x000f) == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//TODO 内存权限检测
		//计算地址
		uint start_address=0;
		uint end_address=0;
		addr_mode_4(st, inst, ref start_address, ref end_address);
		//拷贝
		uint address = start_address;
		for (uint i = 0; i <= 14; i++)
		{
	
			if ((((inst >> (int)i) & 0b0001)) != 0)
			{
				st.registers[i] = mem_ld32(st.mem, address);
				address += 4;
			}
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_ldm_3(cpu_state_t st, uint inst)
	{
		loginst("ldm3", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//rn不能是pc
		if (((inst >> 16) & 0x000f) == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//TODO 内存权限检测
		//计算地址
		uint start_address=0;
		uint end_address=0;
		addr_mode_4(st, inst, ref start_address, ref end_address);
		uint address = start_address;
		for (uint i = 0; i <= 14; i++)
		{
	
			if ((((inst >> (int)i) & 0b0001)) != 0)
			{
				st.registers[i] = mem_ld32(st.mem, address);
				address += 4;
			}
		}
		//TODO 如果有spsr，则拷贝到cpsr，否则出错
		//设置pc
		st.registers[DefineConstants.r_pc] = mem_ld32(st.mem, address);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_ldr(cpu_state_t st, uint inst)
	{
		loginst("ldr", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
        uint curInstruction = inst;

        //TODO 先进行内存检测
        //TODO CP15_reg1_Ubit只有在内核模式下才能访问，这里不处理它
        //得到地址
        uint addr = addr_mode_2(st, inst);
        uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
        uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));

        uint p = (((inst) >> (24)) & 0b1);
        
        uint w = (((inst) >> (21)) & 0b1);
        // 如果P为0， 此时如果W为0则正常访问，如果W为1则再用户模式下访问 （因为都在用户模式下，所以不用管）
        // 如果P为1， 此时如果W为0则不更新基址寄存器，否则结果写会基址寄存器
        uint data = mem_ld32(st.mem, addr);

        if (rd == DefineConstants.r_pc)
        {
            st.registers[DefineConstants.r_pc] = data & 0xfffffffc;
        }
        else
        {
         
            st.registers[rd] = data;
        }

        return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_ldrb(cpu_state_t st, uint inst)
	{
		loginst("ldrb", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//TODO 先进行内存检测
		//TODO CP15_reg1_Ubit只有在内核模式下才能访问，这里不处理它
		//得到地址
		uint addr = addr_mode_2(st, inst);
		// uint32 rn = inst_b4(16);
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		// uint32 p = inst_b1(24);
		// uint32 w = inst_b1(21);
		if (rd == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		// 如果P为0， 此时如果W为0则正常访问，如果W为1则再用户模式下访问 （因为都在用户模式下，所以不用管）
		// 如果P为1， 此时如果W为0则不更新基址寄存器，否则结果写会基址寄存器
		//官方文档是没有处理pc的，所以不用管了
		//和ldr一样处理pc
		// if (rn == r_pc)
		// {
		// 	st->registers[rd] = addr + 8;
		// }
		// else
		// {
		byte @byte = mem_ld8(st.mem, addr); //读取字节

		uint data = (uint)@byte; //扩充到32位
		st.registers[rd] = data;
		// }
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	
	
	public static int arm_inst_ldrbt(cpu_state_t st, uint inst)
	{
		loginst("ldrbt", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//TODO 先进行内存检测
		//TODO CP15_reg1_Ubit只有在内核模式下才能访问，这里不处理它
		//得到地址
		uint addr = addr_mode_2(st, inst);
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		if (rd == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//同样，官方文档没有处理pc
		//和ldr一样处理pc
		// if (rn == r_pc)
		// {
		// 	st->registers[rd] = addr + 8;
		// }
		// else
		// {
		byte @byte = mem_ld8(st.mem, addr); //读取字节
		uint data = (uint)@byte; //扩充到32位
		st.registers[rd] = data;
		// }
		//写回(这里是直接写回)
		// TODO 未验证
		st.registers[rn] = addr;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_ldrd(cpu_state_t st, uint inst)
	{
		loginst("ldrd", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//TODO 内存访问校验
		//p为0时w不能为1
		if ((inst & 0x01200000) == 0x00200000)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint addr = addr_mode_3(st, inst);
		//要求rd是偶数，并且不能是r14
		//TODO 另外还有一些条件，这里暂且不处理他们
	
		if ((((rd) & 0x0001) == 0) && rd != 14 && (addr & 0b0011) == 0)
		{
			st.registers[rd] = mem_ld32(st.mem, addr);
			st.registers[rd + 1] = mem_ld32(st.mem, addr + 4);
		}
		else
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_ldrex(cpu_state_t st, uint inst)
	{
		loginst("*ldrex", inst);
		return DefineConstants.EXEC_NOT_IMPL;
	}
	
	public static int arm_inst_ldrh(cpu_state_t st, uint inst)
	{
		loginst("ldrh", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//TODO 内存访问权限校验
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		if (rd == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint addr = addr_mode_3(st, inst);
		//TODO 其他一些条件不处理了，这里直接加载半字
		ushort data = mem_ld16(st.mem, addr);
		st.registers[rd] = (uint)data;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_ldrsb(cpu_state_t st, uint inst)
	{
		loginst("ldrsb", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//TODO 内存访问权限校验
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		if (rd == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint addr = addr_mode_3(st, inst);
		//TODO 其他一些条件不处理了
		byte data = mem_ld8(st.mem, addr);
        st.registers[rd] = (uint)(((int)((data) << (int)(32 - ((uint)sizeof(byte) << 3)))) >> (int)(32 - ((uint)sizeof(byte) << 3)));
        //st.registers[rd] = (uint)sign_extend_e(data);
        return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_ldrsh(cpu_state_t st, uint inst)
	{
		loginst("ldrsh", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//TODO 内存访问权限校验
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		if (rd == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint addr = addr_mode_3(st, inst);
		//TODO 其他一些条件不处理了
		short data = (short)mem_ld16(st.mem, addr);
		// st->registers[rd] = (uint32)sign_extend_e(data);
		st.registers[rd] = (uint)data;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_ldrt(cpu_state_t st, uint inst)
	{
		loginst("ldrt", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//TODO 内存访问权限校验
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		if (rd == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint addr = addr_mode_3(st, inst);
		//TODO 其他一些条件不处理了
		st.registers[rd] = mem_ld32(st.mem, addr);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_mcr(cpu_state_t st, uint inst)
	{
		loginst("*mcr", inst);
		return DefineConstants.EXEC_NOT_IMPL;
	}
	
	
	public static int arm_inst_mcrr(cpu_state_t st, uint inst)
	{
		loginst("*mcrr", inst);
		return DefineConstants.EXEC_NOT_IMPL;
	}
	
	
	public static int arm_inst_mla(cpu_state_t st, uint inst)
	{
		loginst("mla", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rd = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rn = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		//不能是pc
		if (rd == DefineConstants.r_pc || rn == DefineConstants.r_pc || rs == DefineConstants.r_pc || rm == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
	
		uint s = (((inst) >> (20)) & 0b1);
		uint result = st.registers[rd] = (uint)(st.registers[rm] * st.registers[rs] + st.registers[rn]);
		if (s == 1)
		{
			st.cpsr.n =( result >> 31) != 0;
			st.cpsr.z = result == 0;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_mov(cpu_state_t st, uint inst)
	{
		loginst("mov", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
	
		uint s = (((inst) >> (20)) & 0b1);
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		bool carry=true;
		uint operand = addr_mode_1(st, inst, ref carry);
		st.registers[rd] = operand;
		//TODO 这里暂且不处理
		if (s == 1 && rd == DefineConstants.r_pc)
		{
		}
		else if (s == 1)
		{
			st.cpsr.n = (operand >> 31) != 0;
			st.cpsr.z = operand == 0;
			st.cpsr.c = carry;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_mrc(cpu_state_t st, uint inst)
	{
		loginst("*mrc", inst);
		return DefineConstants.EXEC_NOT_IMPL;
	}
	
	
	
	public static int arm_inst_mrrc(cpu_state_t st, uint inst)
	{
		loginst("*mrrc", inst);
		return DefineConstants.EXEC_NOT_IMPL;
	}
	
	public static int arm_inst_mrs(cpu_state_t st, uint inst)
	{
		loginst("mrs", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
	
		uint r = (((inst) >> (22)) & 0b1);
		if (r == 1)
		{
			//TODO 目前没有spsr，暂不处理
		}
		else
		{
			//取出cpsr
			st.registers[rd] = psr_ldval(st.cpsr);
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	// cond 0 0 1 1 0 R 1 0 field_mask SBO rotate_imm 8_bit_immediate
	// cond 0 0 0 1 0 R 1 0 field_mask SBO SBZ 0 0 0 0 Rm
	public static int arm_inst_msr(cpu_state_t st, uint inst)
	{
		loginst("msr", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
	
		uint i = (((inst) >> (25)) & 0b1); //立即数标识位
	
		uint r = (((inst) >> (22)) & 0b1); //r位
		uint operand;
		if (i == 1)
		{
			uint imm8 = (((inst) << ((32) - (0 + 7) - 1)) >> ((32) - (0 + 7) - 1 + (0)));
			uint rotate_imm = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
			operand = (((uint)(imm8) >> (int)(rotate_imm << 1)) | ((uint)(imm8) << (int)((32 - (rotate_imm << 1))))); // 8_bit_immediate Rotate_Right (rotate_imm * 2)
		}
		else
		{
			//sbz
			if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
			{
				return DefineConstants.EXEC_UNPREDICTABLE;
			}
			operand = st.registers[(((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)))]; //rm
		}
		uint field_mask = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
	
		uint bm1 = (uint)(((((field_mask) >> (0)) & 0b1) == 1) ? 0x000000ff : 0x00000000);
	
		uint bm2 = (uint)(((((field_mask) >> (1)) & 0b1) == 1) ? 0x0000ff00 : 0x00000000);
	
		uint bm3 = (uint)(((((field_mask) >> (2)) & 0b1) == 1) ? 0x00ff0000 : 0x00000000);
	
		uint bm4 = ((((field_mask) >> (3)) & 0b1) == 1) ? 0xff000000 : 0x00000000;
		uint byte_mask = bm1 | bm2 | bm3 | bm4;
		//TODO 接下来的操作需要用到spsr，不过目前并没有，所以不处理了。
		if (true)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		if (r == 0)
		{
			/*
			伪代码
			if InAPrivilegedMode() then
				if (operand AND StateMask) != 0 then
				UNPREDICTABLE // Attempt to set non-ARM execution state
				else
				mask = byte_mask AND (UserMask OR PrivMask)
			else
				mask = byte_mask AND UserMask
				CPSR = (CPSR AND NOT mask) OR (operand AND mask)
			*/
			//TOTO 这里不考虑特权模式
			// uint32 mask = byte_mask &
		}
		else
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_mul(cpu_state_t st, uint inst)
	{
		loginst("mul", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
	
		uint s = (((inst) >> (20)) & 0b1);
		uint rd = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		//不能是r15
		if (rd == DefineConstants.r_pc || rs == DefineConstants.r_pc || rm == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint result = st.registers[rd] = (uint)(st.registers[rm] * st.registers[rs]);
		if (s != 0)
		{
			st.cpsr.n = (result >> 31) != 0;
            st.cpsr.z = result == 0;
        }
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_mvn(cpu_state_t st, uint inst)
	{
		loginst("mvn", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		bool carry=true;
		uint operand = addr_mode_1(st, inst, ref carry);
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
	
		uint s = (((inst) >> (20)) & 0b1);
		uint result = st.registers[rd] = ~operand;
		if (s == 1 && rd == DefineConstants.r_pc)
		{
			//TODO 这里不处理了
		}
		else if (s == 1)
		{
			st.cpsr.n = (result >> 31) != 0;
			st.cpsr.z = result == 0;
			st.cpsr.c = carry;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_orr(cpu_state_t st, uint inst)
	{
		loginst("orr", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		bool carry=true;
		uint operand = addr_mode_1(st, inst, ref carry);
	
		uint s = (((inst) >> (20)) & 0b1);
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint result = st.registers[rd] = st.registers[rn] | operand;
		if (s == 1 && rd == DefineConstants.r_pc)
		{
			//TODO 这里不处理了
		}
		else if (s == 1)
		{
			st.cpsr.n = (result >> 31) != 0;
			st.cpsr.z = result == 0;
			st.cpsr.c = carry;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_pkhbt(cpu_state_t st, uint inst)
	{
		loginst("pkhbt", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint shift_imm = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (7)));
		//pc
		if (rn == DefineConstants.r_pc || rd == DefineConstants.r_pc || rm == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint l = (st.registers[rn]) & 0x0000ffff;
		uint h = ((uint)((st.registers[rm])) << (int)(shift_imm)) & 0xffff0000;
		(st.registers[rd]) = h | l;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	
	public static int arm_inst_pkhtb(cpu_state_t st, uint inst)
	{
		loginst("pkhtb", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint shift_imm = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (7)));
		//pc
		if (rn == DefineConstants.r_pc || rd == DefineConstants.r_pc || rm == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint l;
		if (shift_imm == 0)
		{
	
			if (((((st.registers[rm])) >> (31)) & 0b1) == 0)
			{
				l = 0;
			}
			else
			{
				l = 0xffff;
			}
		}
		else
		{
			l = (uint)(((int)((st.registers[rm])) >> (int)(shift_imm)) & 0x0000ffff);
		}
		uint h = (st.registers[rn]) & 0xffff0000;
		(st.registers[rd]) = h | l;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_pld(cpu_state_t st, uint inst)
	{
		loginst("*pld", inst);
		return DefineConstants.EXEC_NOT_IMPL;
	}
	
	
	public static int arm_inst_qadd(cpu_state_t st, uint inst)
	{
		loginst("qadd", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		//pc
		if (rn == DefineConstants.r_pc || rd == DefineConstants.r_pc || rm == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		bool issat=false;
		long _res = (long)(int)(st.registers[rm]) + (int)(st.registers[rn]);
		(st.registers[rd]) = (uint)signed_sat(_res, 32, ref issat);
		if (issat)
		{
			st.cpsr.q = true;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_qadd16(cpu_state_t st, uint inst)
	{
		loginst("qadd16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		bool issat=false;
		//pc
		if (rn == DefineConstants.r_pc || rd == DefineConstants.r_pc || rm == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//低位结果
		int resL = (int)(short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) + (short)((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		ushort L = (ushort)signed_sat(resL, 16, ref issat);
		//高位结果
		int resH = (int)(short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) + (short)((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		ushort H = (ushort)signed_sat(resH, 16, ref issat);
		//结果综合
		(st.registers[rd]) =(uint)( (H << 16) | L);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_qadd8(cpu_state_t st, uint inst)
	{
		loginst("qadd8", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		bool issat=false;
		//pc
		if (rn == DefineConstants.r_pc || rd == DefineConstants.r_pc || rm == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//低位结果
		short resLL = (short)((sbyte)((((st.registers[rm])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))) + (sbyte)((((st.registers[rn])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))));
		byte LL = (byte)signed_sat(resLL, 8, ref issat);
		short resLH = (short)((sbyte)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8))) + (sbyte)((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8))));
		byte LH = (byte)signed_sat(resLH, 8, ref issat);
		//高位结果
		short resHL = (short)((sbyte)((((st.registers[rm])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16))) + (sbyte)((((st.registers[rn])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16))));
		byte HL = (byte)signed_sat(resHL, 8, ref issat);
		short resHH = (short)((sbyte)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24))) + (sbyte)((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24))));
		byte HH = (byte)signed_sat(resHH, 8, ref issat);
		//结果综合
		(st.registers[rd]) =(uint)( (HH << 24) | (HL << 16) | (LH << 8) | LL);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_qaddsubx(cpu_state_t st, uint inst)
	{
		loginst("qaddsubx", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		bool issat=false;
		//pc
		if (rn == DefineConstants.r_pc || rd == DefineConstants.r_pc || rm == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//低位结果
		int resL = (int)(short)((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) - (int)(short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		ushort L = (ushort)signed_sat(resL, 16, ref issat);
		//高位结果
		int resH = (int)(short)((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) + (int)(short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		ushort H = (ushort)signed_sat(resH, 16, ref issat);
		//结果综合
		(st.registers[rd]) =(uint)( (H << 16) | L);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_qdadd(cpu_state_t st, uint inst)
	{
		loginst("qdadd", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		//pc
		if (rn == DefineConstants.r_pc || rd == DefineConstants.r_pc || rm == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		bool issat1=false;
		bool issat2=false;
		long _rn2 = (long)(int)(st.registers[rn]) * 2;
		int rn2 = signed_sat(_rn2, 32, ref issat1);
		long _res = (long)(int)(st.registers[rm]) + rn2;
		(st.registers[rd]) = (uint)signed_sat(_res, 32, ref issat2);
		if (issat1 || issat2)
		{
			st.cpsr.q = true;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_qdsub(cpu_state_t st, uint inst)
	{
		loginst("qdsub", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		//pc
		if (rn == DefineConstants.r_pc || rd == DefineConstants.r_pc || rm == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		bool issat1=false;
		bool issat2=false;
		long _rn2 = (long)(int)(st.registers[rn]) * 2;
		int rn2 = signed_sat(_rn2, 32, ref issat1);
		long _res = (long)(int)(st.registers[rm]) - rn2;
		(st.registers[rd]) = (uint)signed_sat(_res, 32, ref issat2);
		if (issat1 || issat2)
		{
			st.cpsr.q = true;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_qsub(cpu_state_t st, uint inst)
	{
		loginst("qsub", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		//pc
		if (rn == DefineConstants.r_pc || rd == DefineConstants.r_pc || rm == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		bool issat=false;
		long _res = (long)(int)(st.registers[rm]) - (int)(st.registers[rn]);
		(st.registers[rd]) = (uint)signed_sat(_res, 32, ref issat);
		if (issat)
		{
			st.cpsr.q = true;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_qsub16(cpu_state_t st, uint inst)
	{
		loginst("qsub16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		bool issat=false;
		//pc
		if (rn == DefineConstants.r_pc || rd == DefineConstants.r_pc || rm == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//低位结果
		int resL = (int)(short)((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) - (short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		ushort L =(ushort) signed_sat(resL, 16, ref issat);
		//高位结果
		int resH = (int)(short)((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) - (short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		ushort H = (ushort)signed_sat(resH, 16, ref issat);
		//结果综合
		(st.registers[rd]) =(uint)( (H << 16) | L);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_qsub8(cpu_state_t st, uint inst)
	{
		loginst("qsub8", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		bool issat=false;
		//pc
		if (rn == DefineConstants.r_pc || rd == DefineConstants.r_pc || rm == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//低位结果
		short resLL = (short)((short)(sbyte)((((st.registers[rn])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))) - (sbyte)((((st.registers[rm])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))));
		byte LL = (byte)signed_sat(resLL, 8, ref issat);
		short resLH = (short)((short)(sbyte)((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8))) - (sbyte)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8))));
		byte LH = (byte)signed_sat(resLH, 8, ref issat);
		//高位结果
		short resHL = (short)((short)(sbyte)((((st.registers[rn])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16))) - (sbyte)((((st.registers[rm])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16))));
		byte HL = (byte)signed_sat(resHL, 8, ref issat);
		short resHH = (short)((short)(sbyte)((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24))) - (sbyte)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24))));
		byte HH = (byte)signed_sat(resHH, 8, ref issat);
		//结果综合
		(st.registers[rd]) = (uint)((HH << 24) | (HL << 16) | (LH << 8) | LL);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_qsubaddx(cpu_state_t st, uint inst)
	{
		loginst("qsubaddx", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		bool issat=false ;
		//pc
		if (rn == DefineConstants.r_pc || rd == DefineConstants.r_pc || rm == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//低位结果
		int resL = (int)(short)((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) + (int)(short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		ushort L = (byte)signed_sat(resL, 16, ref issat);
		//高位结果
		int resH = (int)(short)((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) - (int)(short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		ushort H = (byte)signed_sat(resH, 16, ref issat);
		//结果综合
		(st.registers[rd]) = (uint)((H << 16) | L);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_rev(cpu_state_t st, uint inst)
	{
		loginst("rev", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf || (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		//pc
		if (rd == DefineConstants.r_pc || rm == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		(st.registers[rd]) = (((((st.registers[rm])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))) << 24) | (((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8))) << 16) | (((((st.registers[rm])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16))) << 8) | ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24)));
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_rev16(cpu_state_t st, uint inst)
	{
		loginst("rev16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf || (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		//pc
		if (rd == DefineConstants.r_pc || rm == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		(st.registers[rd]) = (((((st.registers[rm])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))) << 8) | ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8))) | (((((st.registers[rm])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16))) << 24) | (((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24))) << 16);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	
	public static int arm_inst_revsh(cpu_state_t st, uint inst)
	{
		loginst("revsh", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf || (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		//pc
		if (rd == DefineConstants.r_pc || rm == DefineConstants.r_pc)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint l = (((((st.registers[rm])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))) << 8) | ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8)));
		uint h;
	
		if (((((st.registers[rm])) >> (7)) & 0b1) == 1)
		{
			h = 0xffff0000; //这里赋值好避免移位
		}
		else
		{
			h = 0x00000000;
		}
		(st.registers[rd]) = h | l;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_rfe(cpu_state_t st, uint inst)
	{
		loginst("*ref", inst);
		//TODO 这条指令用来在特权模式中从异常返回
		return DefineConstants.EXEC_NOT_IMPL;
	}
	
	
	public static int arm_inst_rsb(cpu_state_t st, uint inst)
	{
		loginst("rsb", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//必要值
	
		uint s = (((inst) >> (20)) & 0b1);
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		bool b = false;
		uint operand = addr_mode_1(st, inst, ref b);
        //计算
        uint rnValue = st.registers[rn];

        uint result = (st.registers[rd]) = operand - rnValue;
		if (s == 1 && rd == 15)
		{
			//TODO 这种情况暂时不处理
		}
		else if (s == 1)
		{
			st.cpsr.n =( result >> 31) != 0;
			st.cpsr.z = result == 0;
			st.cpsr.c = operand >= rnValue; // !borrow(result, operand);
			st.cpsr.v = ((((operand) ^ (result)) & ((operand) ^ (rnValue)) & 0x80000000)) != 0;
		}
		return DefineConstants.EXEC_SUCCESS;
	}

	public static int arm_inst_rsc(cpu_state_t st, uint inst)
	{
		loginst("rsc", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//必要值
	
		uint s = (((inst) >> (20)) & 0b1);
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		bool b = false;
		uint operand = addr_mode_1(st, inst, ref b);
        //计算
        uint rnValue = st.registers[rn];
        uint result = (st.registers[rd]) = operand - rnValue - ((!st.cpsr.c)? (uint)(st.cpsr.c?1:0) : 0u);
		if (s == 1 && rd == 15)
		{
			//TODO 这种情况暂时不处理
		}
		else if (s == 1)
		{
			st.cpsr.n = (result >> 31) != 0;
			st.cpsr.z = result == 0;
			st.cpsr.c = operand >= rnValue; //!borrow(result, operand);
			st.cpsr.v = (((operand) ^ (result)) & ((operand) ^ (rnValue)) & 0x80000000) != 0;
		}
		return DefineConstants.EXEC_SUCCESS;
	}

	public static int arm_inst_sadd16(cpu_state_t st, uint inst)
	{
		loginst("sadd16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//必要值
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		byte ge = 0b0000;
		int sum;
		uint result = 0x00000000;
		short rn0 = (short)((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		short rn16 = (short)((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		short rm0 = (short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		short rm16 = (short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		sum = rn0 + rm0;
		result |= (uint)(sum & 0x0000ffff);
		if (sum >= 0)
		{
	
			ge |= 0b0011;
		}
		sum = rn16 + rm16;
		result |= (uint)(sum & 0x0000ffff) << 16;
		if (sum >= 0)
		{
	
			ge |= 0b1100;
		}
		(st.registers[rd]) = result;
		st.cpsr.ge = ge;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_sadd8(cpu_state_t st, uint inst)
	{
		loginst("sadd8", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//必要值
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		byte ge = 0b0000;
		int sum;
		uint result = 0x00000000;
		sbyte rn0 = (sbyte)((((st.registers[rn])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0)));
		sbyte rn8 = (sbyte)((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8)));
		sbyte rn16 = (sbyte)((((st.registers[rn])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16)));
		sbyte rn24 = (sbyte)((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24)));
		sbyte rm0 = (sbyte)((((st.registers[rm])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0)));
		sbyte rm8 = (sbyte)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8)));
		sbyte rm16 = (sbyte)((((st.registers[rm])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16)));
		sbyte rm24 = (sbyte)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24)));
		sum = rn0 + rm0;
		result |= (uint)((sum & 0x000000ff));
		if (sum >= 0)
		{
	
			ge |= 0b0001;
		}
		sum = rn8 + rm8;
		result |= (uint)((sum & 0x000000ff) << 8);
		if (sum >= 0)
		{
	
			ge |= 0b0010;
		}
		sum = rn16 + rm16;
		result |= (uint)((sum & 0x000000ff) << 16);
		if (sum >= 0)
		{
	
			ge |= 0b0100;
		}
		sum = rn24 + rm24;
		result |= (uint)((sum & 0x000000ff) << 24);
		if (sum >= 0)
		{
	
			ge |= 0b1000;
		}
		(st.registers[rd]) = result;
		st.cpsr.ge = ge;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	
	public static int arm_inst_saddsubx(cpu_state_t st, uint inst)
	{
		loginst("saddsubx", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//必要值
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		byte ge = 0b0000;
		int sum;
		uint result = 0x00000000;
		short rn0 = (short)(((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))));
		short rn16 = (short)((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		short rm0 = (short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		short rm16 = (short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		sum = rn16 + rm0;
		result |= (uint)((sum & 0x0000ffff) << 16);
		if (sum >= 0)
		{
	
			ge |= 0b1100;
		}
		sum = rn0 - rm16;
		result |= (uint)(sum & 0x0000ffff);
		if (sum >= 0)
		{
	
			ge |= 0b0011;
		}
		(st.registers[rd]) = result;
		st.cpsr.ge = ge;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_sbc(cpu_state_t st, uint inst)
	{
		loginst("sbc", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//必要值
	
		uint s = (((inst) >> (20)) & 0b1);
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		bool b = true;
		uint operand = addr_mode_1(st, inst, ref b);
        //计算
        uint rnValue = st.registers[rn];

        uint result = (st.registers[rd]) = rnValue - operand - ((!st.cpsr.c)? (uint)(st.cpsr.c?1:0) : 0u);
		if (s == 1 && rd == 15)
		{
			//TODO 这种情况暂时不处理
		}
		else if (s == 1)
		{
			st.cpsr.n = (result >> 31) != 0;
			st.cpsr.z = result == 0;
			st.cpsr.c = rnValue >= operand; // !borrow(result, regv(rn));
			st.cpsr.v = (((rnValue) ^ (result)) & ((rnValue) ^ (operand)) & 0x80000000) != 0;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_sel(cpu_state_t st, uint inst)
	{
		loginst("sel", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint result = 0;
	
		result |= ((((st.cpsr.ge) >> (0)) & 0b1)!=0 ? ((((st.registers[rn])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))) : ((((st.registers[rm])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))));
	
		result |= ((((st.cpsr.ge) >> (1)) & 0b1)!=0 ? ((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8))) : ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8))));
	
		result |= ((((st.cpsr.ge) >> (2)) & 0b1)!=0 ? ((((st.registers[rn])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16))) : ((((st.registers[rm])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16))));
	
		result |= ((((st.cpsr.ge) >> (3)) & 0b1)!=0 ? ((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24))) : ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24))));
		(st.registers[rd]) = result;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_setend(cpu_state_t st, uint inst)
	{
		loginst("setend", inst);
		//sbz
		if ((((inst) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (10))) != 0 || (((inst) >> (8)) & 0b1) != 0 || inst_bm(inst,0, 0 + 3) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		
		uint e = (((inst) >> (9)) & 0b1);
		st.cpsr.e = e != 0;
		return DefineConstants.EXEC_SUCCESS;
	}
	//public static uint inst_bm(uint v, int a, int b, int size=32)
 //   {
	//	return (uint)(((v) << ((size) - (b) - 1)) >> ((size) - (b) - 1 + (a)));
	//}
	
	
	
	public static int arm_inst_shadd16(cpu_state_t st, uint inst)
	{
		loginst("shadd16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//必要值
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		int sum;
		uint result = 0x00000000;
		short rn0 = (short)((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		short rn16 = (short)((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		short rm0 = (short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		short rm16 = (short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		sum = rn0 + rm0;
		result |= (uint)((sum >> 1) & 0x0000ffff);
		sum = rn16 + rm16;
		result |= (uint)(((sum >> 1) & 0x0000ffff) << 16);
		(st.registers[rd]) = result;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_shadd8(cpu_state_t st, uint inst)
	{
		loginst("shadd8", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//必要值
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		int sum;
		uint result = 0x00000000;
		sbyte rn0 = (sbyte)((((st.registers[rn])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0)));
		sbyte rn8 = (sbyte)((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8)));
		sbyte rn16 = (sbyte)((((st.registers[rn])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16)));
		sbyte rn24 = (sbyte)((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24)));
		sbyte rm0 = (sbyte)((((st.registers[rm])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0)));
		sbyte rm8 = (sbyte)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8)));
		sbyte rm16 = (sbyte)((((st.registers[rm])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16)));
		sbyte rm24 = (sbyte)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24)));
		sum = rn0 + rm0;
		result |= (uint)((sum >> 1) & 0x000000ff);
		sum = rn8 + rm8;
		result |= (uint)(((sum >> 1) & 0x000000ff) << 8);
		sum = rn16 + rm16;
		result |= (uint)((sum >> 1) & 0x000000ff) << 16;
		sum = rn24 + rm24;
		result |= (uint)((sum >> 1) & 0x000000ff) << 24;
		(st.registers[rd]) = result;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_shaddsubx(cpu_state_t st, uint inst)
	{
		loginst("shaddsubx", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//必要值
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		int sum;
		uint result = 0x00000000;
		short rn0 = (short)((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		short rn16 = (short)((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		short rm0 = (short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		short rm16 = (short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		sum = rn16 + rm0;
		result |= (uint)((sum >> 1) & 0x0000ffff) << 16;
		sum = rn0 - rm16;
		result |= (uint)((sum >> 1) & 0x0000ffff);
		(st.registers[rd]) = result;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_shsub16(cpu_state_t st, uint inst)
	{
		loginst("shsub16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if (inst_b4(inst, 8) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//必要值
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		int sum;
		uint result = 0x00000000;
		short rn0 = (short)((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		short rn16 = (short)((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		short rm0 = (short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		short rm16 = (short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		sum = rn0 - rm0;
		result |= (uint)((sum >> 1) & 0x0000ffff);
		sum = rn16 - rm16;
		result |= (uint)(((sum >> 1) & 0x0000ffff) << 16);
		(st.registers[rd]) = result;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_shsub8(cpu_state_t st, uint inst)
	{
		loginst("shsub8", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if (inst_b4(inst, 8) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//必要值
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		int sum;
		uint result = 0x00000000;
		sbyte rn0 = (sbyte)((((st.registers[rn])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0)));
		sbyte rn8 = (sbyte)((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8)));
		sbyte rn16 = (sbyte)((((st.registers[rn])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16)));
		sbyte rn24 = (sbyte)((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24)));
		sbyte rm0 = (sbyte)((((st.registers[rm])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0)));
		sbyte rm8 = (sbyte)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8)));
		sbyte rm16 = (sbyte)((((st.registers[rm])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16)));
		sbyte rm24 = (sbyte)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24)));
		sum = rn0 - rm0;
		result |= (uint)((sum >> 1) & 0x000000ff);
		sum = rn8 - rm8;
		result |= (uint)(((sum >> 1) & 0x000000ff) << 8);
		sum = rn16 - rm16;
		result |= (uint)(((sum >> 1) & 0x000000ff) << 16);
		sum = rn24 - rm24;
		result |= (uint)(((sum >> 1) & 0x000000ff) << 24);
		(st.registers[rd]) = result;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_shsubaddx(cpu_state_t st, uint inst)
	{
		loginst("shsubaddx", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//必要值
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		int sum;
		uint result = 0x00000000;
		short rn0 = (short)((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		short rn16 = (short)((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		short rm0 = (short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		short rm16 = (short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		sum = rn16 - rm0;
		result |= (uint)(((sum >> 1) & 0x0000ffff) << 16);
		sum = rn0 + rm16;
		result |= (uint)((sum >> 1) & 0x0000ffff);
		(st.registers[rd]) = result;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	
	public static int arm_inst_smla_x_y(cpu_state_t st, uint inst)
	{
		loginst("smla_x_y", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rd = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rn = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		uint x = (((inst) >> (5)) & 0b1);
	
		uint y = (((inst) >> (6)) & 0b1);
		int operand1 = (x == 0) ? (short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) : (short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		int operand2 = (y == 0) ? (short)((((st.registers[rs])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) : (short)((((st.registers[rs])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		uint operand = (uint)(operand1 * operand2);
		uint result = (st.registers[rd]) = operand + (st.registers[rn]);
		if (((((result) ^ (operand)) & ((result) ^ (st.registers[rn])) & 0x80000000)) != 0)
		{
			st.cpsr.q = true;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_smlad(cpu_state_t st, uint inst)
	{
		loginst("smlad", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rd = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rn = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		uint x = (((inst) >> (5)) & 0b1);
		uint operand = (x == 1) ? (((uint)((st.registers[rs])) >> (16)) | ((uint)((st.registers[rs])) << ((32 - (16))))) : (st.registers[rs]);
		uint product1 = (uint)((int)(short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) * (short)(((operand) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))));
		uint product2 = (uint)((int)(short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) * (short)(((operand) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))));
		uint result = (st.registers[rd]) = (st.registers[rn]) + product1 + product2;
		if (((((result) ^ ((st.registers[rn]))) & ((result) ^ (product1)) & 0x80000000)) != 0)
		{
			st.cpsr.q = true;
		}
		return DefineConstants.EXEC_SUCCESS;
	}

	
	public static int arm_inst_smlal(cpu_state_t st, uint inst)
	{
		loginst("smlal", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rdh = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rdl = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		uint s = (((inst) >> (20)) & 0b1);
		long res = (long)(int)(st.registers[rs]) * (long)(int)(st.registers[rm]) + (uint)(st.registers[rdl]);
		uint resl = (st.registers[rdl]) = (uint)res;
        uint resh = (st.registers[rdh]) = (uint)((res >> 32) + (int)(st.registers[rdh]));
		if (s == 1)
		{
			st.cpsr.n = (resh >> 31) != 0;
			st.cpsr.z = (resl == 0) && (resh == 0);
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_smlal_x_y(cpu_state_t st, uint inst)
	{
		loginst("smlal_x_y", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rdh = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rdl = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		uint x = (((inst) >> (5)) & 0b1);
	
		uint y = (((inst) >> (6)) & 0b1);
		int operand1 = (x == 0) ? (short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) : (short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		int operand2 = (y == 0) ? (short)((((st.registers[rs])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) : (short)((((st.registers[rs])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		int mul_op = operand1 * operand2;
		uint resl = (st.registers[rdl]) = (uint)((st.registers[rdl]) + mul_op);
		(st.registers[rdh]) = (uint)((st.registers[rdh]) + ((mul_op < 0) ? 0xffffffff : 0x000000000) + (((resl) < ((st.registers[rdl])))?1u:0u));
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_smlald(cpu_state_t st, uint inst)
	{
		loginst("smlald", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rdh = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rdl = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		uint x = (((inst) >> (5)) & 0b1);
		uint operand = (x == 1) ? (((uint)((st.registers[rs])) >> (16)) | ((uint)((st.registers[rs])) << ((32 - (16))))) : (st.registers[rs]);
		long accvalue = (long)((((ulong)(st.registers[rdh])) << 32) | (st.registers[rdl]));
		int product1 = (int)(short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) * (short)(((operand) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		int product2 = (int)(short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) * (short)(((operand) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		long result = accvalue + product1 + product2;
		st.registers[rdl] =(uint)( result & 0x00000000ffffffff);
		st.registers[rdh] = (uint)(result >> 32);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_smlaw_y(cpu_state_t st, uint inst)
	{
		loginst("smlaw_y", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rd = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rn = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		uint y = (((inst) >> (6)) & 0b1);
		short operand = (short)((y == 0) ? ((((st.registers[rs])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) : ((((st.registers[rs])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))));
		long res_mul = (long)(int)(st.registers[rm]) * operand;
		uint res16 = (uint)((((res_mul) << ((64) - (47) - 1)) >> ((64) - (47) - 1 + (16))));
		uint result = (st.registers[rd]) = res16 + (st.registers[rn]);
		if (((((result) ^ (res16)) & ((result) ^ ((st.registers[rn]))) & 0x80000000)) != 0)
		{
			st.cpsr.q = true;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_smlsd(cpu_state_t st, uint inst)
	{
		loginst("smlsd", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rd = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rn = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		uint x = (((inst) >> (5)) & 0b1);
		uint operand = (x == 1) ? (((uint)((st.registers[rs])) >> (16)) | ((uint)((st.registers[rs])) << ((32 - (16))))) : (st.registers[rs]);
		int product1 = (int)(short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) * (short)(((operand) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		int product2 = (int)(short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) * (short)(((operand) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		uint diffofproducts = (uint)(product1 - product2);
		uint result = (st.registers[rd]) = (st.registers[rn]) + diffofproducts;
		if (((((result) ^ ((st.registers[rn]))) & ((result) ^ (diffofproducts)) & 0x80000000)) != 0)
		{
			st.cpsr.q = true;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_smlsld(cpu_state_t st, uint inst)
	{
		loginst("smlsld", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rdh = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rdl = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		uint x = (((inst) >> (5)) & 0b1);
		uint operand = (x == 1) ? (((uint)((st.registers[rs])) >> (16)) | ((uint)((st.registers[rs])) << ((32 - (16))))) : (st.registers[rs]);
		long accvalue = (long)((((ulong)(st.registers[rdh])) << 32) | (st.registers[rdl]));
		int product1 = (int)(short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) * (short)(((operand) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		int product2 = (int)(short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) * (short)(((operand) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		ulong result = (ulong)(accvalue + product1 - product2);
		(st.registers[rdl]) = (uint)(result & 0x00000000ffffffff);
		(st.registers[rdh]) = (uint)(result >> 32);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_smmla(cpu_state_t st, uint inst)
	{
		loginst("smmla", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rd = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rn = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		uint r = (((inst) >> (5)) & 0b1);
		long value = (long)(int)(st.registers[rm]) * (int)(st.registers[rs]);
		if (r == 1)
		{
			(st.registers[rd]) = (uint)((((long)(int)(st.registers[rn]) << 32) + value + 0x80000000) >> 32);
		}
		else
		{
			(st.registers[rd]) = (uint)((((long)(int)(st.registers[rn]) << 32) + value) >> 32);
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_smmls(cpu_state_t st, uint inst)
	{
		loginst("smmls", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rd = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rn = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		uint r = (((inst) >> (5)) & 0b1);
		long value = (long)(int)(st.registers[rm]) * (int)(st.registers[rs]);
		if (r == 1)
		{
			(st.registers[rd]) = (uint)((((long)(int)(st.registers[rn]) << 32) - value + 0x80000000) >> 32);
		}
		else
		{
			(st.registers[rd]) = (uint)((((long)(int)(st.registers[rn]) << 32) - value) >> 32);
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_smmul(cpu_state_t st, uint inst)
	{
		loginst("smmul", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rd = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		uint r = (((inst) >> (5)) & 0b1);
		ulong value;
		if (r == 1)
		{
			value = (ulong)((long)(int)(st.registers[rm]) * (int)(st.registers[rs]) + 0x80000000);
		}
		else
		{
			value = (ulong)((long)(int)(st.registers[rm]) * (int)(st.registers[rs]));
		}
		(st.registers[rd]) = (uint)(value >> 32);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_smuad(cpu_state_t st, uint inst)
	{
		loginst("smuad", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rd = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		uint x = (((inst) >> (5)) & 0b1);
		uint operand = (x == 1) ? (((uint)((st.registers[rs])) >> (16)) | ((uint)((st.registers[rs])) << ((32 - (16))))) : (st.registers[rs]);
		uint product1 = (uint)((int)(short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) * (short)(((operand) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))));
		uint product2 = (uint)((int)(short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) * (short)(((operand) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))));
		uint result = (st.registers[rd]) = product1 + product2;
		if (((((result) ^ (product1)) & ((result) ^ (product2)) & 0x80000000)) != 0)
		{
			st.cpsr.q = true;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_smul_x_y(cpu_state_t st, uint inst)
	{
		loginst("smul_x_y", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rd = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		uint x = (((inst) >> (5)) & 0b1);
	
		uint y = (((inst) >> (6)) & 0b1);
		short operand1 = (short)((x == 0) ? ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) : ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))));
		short operand2 = (short)((y == 0) ? ((((st.registers[rs])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) : ((((st.registers[rs])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))));
		(st.registers[rd]) = (uint)((int)operand1 * operand2);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_smull(cpu_state_t st, uint inst)
	{
		loginst("smull", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rdh = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rdl = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		uint s = (((inst) >> (20)) & 0b1);
		ulong res_mul = (ulong)((long)(int)(st.registers[rm]) * (int)(st.registers[rs]));
		uint resh = (st.registers[rdh]) = (uint)(res_mul >> 32);
		uint resl = (st.registers[rdl]) =(uint) (res_mul & 0x00000000ffffffff);
		if (s == 1)
		{
			st.cpsr.n = (resh >> 31) != 0;
			st.cpsr.z = (resl == 0) && (resh == 0);
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_smulw_y(cpu_state_t st, uint inst)
	{
		loginst("smulw_y", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rd = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		uint y = (((inst) >> (6)) & 0b1);
		short operand =(short)( (y == 0) ? ((((st.registers[rs])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) : ((((st.registers[rs])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))));
		ulong mul_res = (ulong)((st.registers[rm]) * operand);
		(st.registers[rd]) = (uint)((((mul_res) << ((64) - (47) - 1)) >> ((64) - (47) - 1 + (16))));
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_smusd(cpu_state_t st, uint inst)
	{
		loginst("smusd", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rd = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		uint x = (((inst) >> (5)) & 0b1);
		uint operand = (x == 1) ? (((uint)((st.registers[rs])) >> (16)) | ((uint)((st.registers[rs])) << ((32 - (16))))) : (st.registers[rs]);
		int product1 = (int)(short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) * (short)(((operand) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		int product2 = (int)(short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) * (short)(((operand) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		(st.registers[rd]) = (uint)(product1 - product2);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_srs(cpu_state_t st, uint inst)
	{
		loginst("*srs", inst);
		//sbz
		// if (inst_bm(5, 7) != 0 || inst_b4(12) != 0)
		// 	return EXEC_UNPREDICTABLE;
		// //TODO 内存访问权限检测
		// uint32 p = inst_b1(24);
		// uint32 u = inst_b1(23);
		// uint32 w = inst_b1(21);
		// uint32 mode = inst_bm(0, 4);
		// 1 1 1 1 1 0 0 P U 1 W 0 1 1 0 1 SBZ 0 1 0 1 SBZ mode
		// return EXEC_SUCCESS;
		//TODO 暂时不实现吧
		return DefineConstants.EXEC_NOT_IMPL;
	}
	
	
	
	public static int arm_inst_ssat(cpu_state_t st, uint inst)
	{
		loginst("ssat", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint sat_imm = (((inst) << ((32) - (20) - 1)) >> ((32) - (20) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint shift_imm = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (7)));
	
		uint shift = (((inst) >> (6)) & 0b1);
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		long operand;
		if (shift == 1)
		{
			if (shift_imm == 0)
			{
				operand = (st.registers[rm]); //asr(regv(rm), 32);
			}
			else
			{
				operand = ((long)((st.registers[rm])) >>(int) (shift_imm));
			}
		}
		else
		{
			operand = (long)((ulong)((st.registers[rm])) << (int)(shift_imm));
		}
		bool issat=false;
		(st.registers[rd]) =(uint) signed_sat(operand,(int)( sat_imm + 1), ref issat);
		if (issat)
		{
			st.cpsr.q = true;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_ssat16(cpu_state_t st, uint inst)
	{
		loginst("ssat16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint sat_imm = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		bool issat1=false;
		bool issat2=false;
		ushort rdl = (ushort)signed_sat(((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))), (int)(sat_imm + 1), ref issat1);
		ushort rdh = (ushort)signed_sat(((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))), (int)(sat_imm + 1), ref issat2);
		(st.registers[rd]) = (uint)((rdh << 16) | rdl);
		if (issat1 || issat2)
		{
			st.cpsr.q = true;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_ssub16(cpu_state_t st, uint inst)
	{
		loginst("ssub16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		short diff;
		uint result = 0x00000000;
		uint ge = 0x0;
		diff = (short)((short)((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) - (short)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))));
		result |= ((ushort)diff);
		if (diff >= 0)
		{
	
			ge |= 0b0011;
		}
		diff = (short)((short)((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) - (short)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))));
		result |= (uint)(((ushort)diff) << 16);
		if (diff >= 0)
		{
	
			ge |= 0b1100;
		}
		(st.registers[rd]) = result;
		st.cpsr.ge = ge;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_ssub8(cpu_state_t st, uint inst)
	{
		loginst("ssub8", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		sbyte diff;
		uint result = 0x00000000;
		uint ge = 0x0;
		diff = (sbyte)((sbyte)((((st.registers[rn])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))) - (sbyte)((((st.registers[rm])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))));
		result |= ((byte)diff);
		if (diff >= 0)
		{
	
			ge |= 0b0001;
		}
		diff = (sbyte)((sbyte)((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8))) - (sbyte)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8))));
		result |= (uint)(((byte)diff) << 8);
		if (diff >= 0)
		{
	
			ge |= 0b0010;
		}
		diff = (sbyte)((sbyte)((((st.registers[rn])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16))) - (sbyte)((((st.registers[rm])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16))));
		result |= (uint)(((byte)diff) << 16);
		if (diff >= 0)
		{
	
			ge |= 0b0100;
		}
		diff = (sbyte)((sbyte)((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24))) - (sbyte)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24))));
		result |= (uint)(((byte)diff) << 24);
		if (diff >= 0)
		{
	
			ge |= 0b1000;
		}
		(st.registers[rd]) = result;
		st.cpsr.ge = ge;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_ssubaddx(cpu_state_t st, uint inst)
	{
		loginst("ssubaddx", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		short res;
		uint result = 0x00000000;
		uint ge = 0x0;
		res =(short)( ((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) + ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))));
		result |= ((ushort)res);
		if (res >= 0)
		{
	
			ge |= 0b0011;
		}
		res = (short)(((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) - ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))));
		result |= (uint)((ushort)res) << 16;
		if (res >= 0)
		{
	
			ge |= 0b1100;
		}
		(st.registers[rd]) = result;
		st.cpsr.ge = ge;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_stc(cpu_state_t st, uint inst)
	{
		loginst("*stc", inst);
		return DefineConstants.EXEC_NOT_IMPL;
	}
	
	
	
	public static int arm_inst_stm_1(cpu_state_t st, uint inst)
	{
		loginst("stm_1", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//TODO 内存访问检测
		uint start_address=0;
		uint end_address=0;
		addr_mode_4(st, inst, ref start_address, ref end_address);
		ushort register_list = (ushort)((((inst) << ((32) - (0 + 15) - 1)) >> ((32) - (0 + 15) - 1 + (0))));
		uint address = start_address;

        for (uint i = 0; i <= 15; i++)
		{
			if ((((inst >> (int)i) & 0b0001)) != 0)
			{
				mem_st32(st.mem, address, (st.registers[i]));
				address += 4;
				//TODO 从ARMv6开始还会进行物理内存的检测
			}
		}
        if ((register_list & 0x8000)!=0)
        {

            mem_st32(st.mem, address, st.registers[15]);
        }
        
        return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_stm_2(cpu_state_t st, uint inst)
	{
		loginst("stm_2", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//TODO 内存访问检测
		uint start_address=0;
		uint end_address=0;
		addr_mode_4(st, inst, ref start_address, ref end_address);
		//TODO 这个就按照stm(1)来实现吧，目前不区分模式
		ushort register_list = (ushort)(((inst) << ((32) - (0 + 15) - 1)) >> ((32) - (0 + 15) - 1 + (0)));
		uint address = start_address;
        for (uint i = 0; i <= 15; i++)
		{
	
			if ((((inst >> (int)i) & 0b0001)) != 0)
			{
				mem_st32(st.mem, address, (st.registers[i]));
				address += 4;
				//TODO 从ARMv6开始还会进行物理内存的检测
			}
		}

        if ((register_list & 0x8000) != 0)
        {

            mem_st32(st.mem, address, st.registers[15]);
        }
        
        return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_str(cpu_state_t st, uint inst)
	{
		loginst("str", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//TODO 进行内存访问权限的检测
		uint address = addr_mode_2(st, inst);
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		mem_st32(st.mem, address, (st.registers[rd]));
		//TODO 同样，进行物理内存地址处理
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_strb(cpu_state_t st, uint inst)
	{
		loginst("strb", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//TODO 进行内存访问权限的检测
		uint address = addr_mode_2(st, inst);
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		mem_st8(st.mem, address, (st.registers[rd]) & 0x00ff);
		//TODO 同样，进行物理内存地址处理
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	
	public static int arm_inst_strbt(cpu_state_t st, uint inst)
	{
		loginst("strbt", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//TODO 进行内存访问权限的检测
		uint address = addr_mode_2(st, inst);
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		//这个和strb一样的吧？？
		mem_st8(st.mem, address, (st.registers[rd]) & 0x00ff);
		//TODO 同样，进行物理内存地址处理
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	
	public static int arm_inst_strd(cpu_state_t st, uint inst)
	{
		loginst("strd", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//TODO 进行内存访问权限的检测
		uint address = addr_mode_3(st, inst);
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
	
		if (((((st.registers[rd])) & 0x0001) == 0) && rd != 14 && (((address) << ((32) - (1) - 1)) >> ((32) - (1) - 1 + (0))) == 0b00)
		{
			mem_st32(st.mem, address, (st.registers[rd]));
			mem_st32(st.mem, address + 4, (st.registers[rd + 1]));
		}
		else
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//TODO 进行物理内存地址处理
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_strex(cpu_state_t st, uint inst)
	{
		loginst("*strex", inst);
		return DefineConstants.EXEC_NOT_IMPL;
	}
	
	
	public static int arm_inst_strh(cpu_state_t st, uint inst)
	{
		loginst("strh", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//TODO 内存访问权限校验
		uint address = addr_mode_3(st, inst);
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		//TODO 其他一些条件不处理了
		mem_st16(st.mem, address, (st.registers[rd]));
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_strt(cpu_state_t st, uint inst)
	{
		loginst("strt", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//TODO 进行内存访问权限的检测
		uint address = addr_mode_2(st, inst);
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		//这个也和str一样的？？
		mem_st32(st.mem, address, (st.registers[rd]));
		//TODO 同样，进行物理内存地址处理
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_sub(cpu_state_t st, uint inst)
	{
		loginst("sub", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//必要值
	
		uint s = (((inst) >> (20)) & 0b1);
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		bool b = true;
		uint operand = addr_mode_1(st, inst, ref b);
        //计算
        uint rnValue = st.registers[rn];

        uint result = (st.registers[rd]) = rnValue - operand;

        if (s == 1 && rd == 15)
		{
			//TODO 这种情况暂时不处理
		}
		else if (s == 1)
		{
			st.cpsr.n = (result >> 31) != 0;
			st.cpsr.z = result == 0;
			st.cpsr.c = rnValue >= operand; // !borrow(result, regv(rn));
			st.cpsr.v = ((((st.registers[rn])) ^ (result)) & (((st.registers[rn])) ^ (operand)) & 0x80000000) != 0;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_swi(cpu_state_t st, uint inst)
	{
		loginst("swi", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//这里不按照官方文档实现了，直接调用一下具体的中断处理函数就算了
		uint num = (((inst) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (0))); //中断号
		//直接调用一下中断处理程序算了
		on_sorftware_interrupt(st, num);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_swp(cpu_state_t st, uint inst)
	{
		loginst("swp", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		//TODO 这里先直接交换吧，其他的以后再说
		uint tmp = mem_ld32(st.mem, (st.registers[rn]));
		mem_st32(st.mem, (st.registers[rn]), (st.registers[rm]));
		(st.registers[rd]) = tmp;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_swpb(cpu_state_t st, uint inst)
	{
		loginst("swpb", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		//TODO 这里先直接交换吧，其他的以后再说
		uint tmp = mem_ld8(st.mem, (st.registers[rn]));
		mem_st8(st.mem, (st.registers[rn]), (st.registers[rm]));
		(st.registers[rd]) = tmp;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_sxtab(cpu_state_t st, uint inst)
	{
		loginst("sxtab", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (9) - 1)) >> ((32) - (9) - 1 + (8))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint rotate = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (10)));
		uint operand = (((uint)((st.registers[rm])) >> (int)(rotate << 3)) | ((uint)((st.registers[rm])) << (int)((32 - (rotate << 3)))));
		(st.registers[rd]) =(uint)( (st.registers[rn]) + (((int)((operand) << (32 - (8)))) >> (32 - (8))));
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_sxtab16(cpu_state_t st, uint inst)
	{
		loginst("sxtab16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (9) - 1)) >> ((32) - (9) - 1 + (8))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint rotate = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (10)));
		uint operand = (((uint)((st.registers[rm])) >> (int)(rotate << 3)) | ((uint)((st.registers[rm])) << (int)((32 - (rotate << 3)))));
		uint resl = (uint)(((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) + (((int)(((((operand) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0)))) << (32 - (8)))) >> (32 - (8))));
		uint resh = (uint)(((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) + (((int)(((((operand) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16)))) << (32 - (8)))) >> (32 - (8))));
		(st.registers[rd]) = (resh << 16) | resl;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_sxtah(cpu_state_t st, uint inst)
	{
		loginst("sxtah", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (9) - 1)) >> ((32) - (9) - 1 + (8))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint rotate = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (10)));
		uint operand = (((uint)((st.registers[rm])) >> (int)(rotate << 3)) | ((uint)((st.registers[rm])) << ((32 - (int)(rotate << 3)))));
		(st.registers[rd]) = (uint)((st.registers[rn]) + (((int)((operand) << (32 - (16)))) >> (32 - (16))));
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_sxtb(cpu_state_t st, uint inst)
	{
		loginst("sxtb", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (9) - 1)) >> ((32) - (9) - 1 + (8))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint rotate = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (10)));
		uint operand = (((uint)((st.registers[rm])) >> (int)(rotate << 3)) | ((uint)((st.registers[rm])) << ((32 - (int)(rotate << 3)))));
		(st.registers[rd]) = (uint)((((int)((operand) << (32 - (8)))) >> (32 - (8))));
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_sxtb16(cpu_state_t st, uint inst)
	{
		loginst("sxtb16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (9) - 1)) >> ((32) - (9) - 1 + (8))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint rotate = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (10)));
		uint operand = (((uint)((st.registers[rm])) >> (int)(rotate << 3)) | ((uint)((st.registers[rm])) << (int)((32 - (rotate << 3)))));
		uint resl = (uint)(((int)((operand) << (32 - (8)))) >> (32 - (8)));
		uint resh = (uint)(((int)(((((operand) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16)))) << (32 - (8)))) >> (32 - (8)));
		(st.registers[rd]) = (resh << 16) | resl;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_sxth(cpu_state_t st, uint inst)
	{
		loginst("sxth", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (9) - 1)) >> ((32) - (9) - 1 + (8))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint rotate = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (10)));
		uint operand = (((uint)((st.registers[rm])) >> (int)(rotate << 3)) | ((uint)((st.registers[rm])) << (int)((32 - (rotate << 3)))));
		(st.registers[rd]) = (uint)((((int)((operand) << (32 - (16)))) >> (32 - (16))));
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_teq(cpu_state_t st, uint inst)
	{
		loginst("teq", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//必要值
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		bool carry=true;
		uint operand = addr_mode_1(st, inst, ref carry);
		uint alu_out = (st.registers[rn]) ^ operand;
		st.cpsr.n = (alu_out >> 31) != 0;
		st.cpsr.z = alu_out == 0;
		st.cpsr.c = carry;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_tst(cpu_state_t st, uint inst)
	{
		loginst("tst", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		//必要值
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		bool carry=true;
		uint operand = addr_mode_1(st, inst, ref carry);
		uint alu_out = (st.registers[rn]) & operand;
		st.cpsr.n = (alu_out >> 31) != 0;
		st.cpsr.z = alu_out == 0;
		st.cpsr.c = carry;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_uadd16(cpu_state_t st, uint inst)
	{
		loginst("uadd16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint ge=0;
		uint res0 = (((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) + ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)))) & 0x0000ffff;
		if ((((res0) & 0x10000)) != 0)
		{
	
			ge |= 0b0011;
		}
		uint res16 = (((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) + ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)))) & 0x0000ffff;
		if ((((res16) & 0x10000)) != 0)
		{
	
			ge |= 0b1100;
		}
		(st.registers[rd]) = res0 | (res16 << 16);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_uadd8(cpu_state_t st, uint inst)
	{
		loginst("uadd8", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint ge=0;
		uint res0 = (((((st.registers[rn])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))) + ((((st.registers[rm])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0)))) & 0x000000ff;
		ge |= ((res0) & 0x100);
		uint res8 = (((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8))) + ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8)))) & 0x000000ff;
		ge |= ((res8) & 0x100) << 1;
		uint res16 = (((((st.registers[rn])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16))) + ((((st.registers[rm])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16)))) & 0x000000ff;
		ge |= ((res16) & 0x100) << 2;
		uint res24 = (((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24))) + ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24)))) & 0x000000ff;
		ge |= ((res24) & 0x100) << 3;
		(st.registers[rd]) = res0 | (res8 << 8) | (res16 << 16) | (res24 << 24);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_uaddsubx(cpu_state_t st, uint inst)
	{
		loginst("uaddsubx", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint ge=0;
		uint res0 = (((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) - ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)))) & 0x0000ffff;
		if ((((res0) & 0x10000)) != 0)
		{
	
			ge |= 0b0011;
		}
		uint res16 = (((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) + ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)))) & 0x0000ffff;
		if ((((res16) & 0x10000)) != 0)
		{
	
			ge |= 0b1100;
		}
		(st.registers[rd]) = res0 | (res16 << 16);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_uhadd16(cpu_state_t st, uint inst)
	{
		loginst("uhadd16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint res0 = (((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) + ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)))) & 0x0001fffe; //与上0x0001fffe的目的是，去除高字节的第1-31位(需要保留0位)，在去除低字节的0位，这样，在后面就能减少移位操作了。
		uint res16 = (((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) + ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)))) & 0x0001fffe;
		// regv(rd) = (res0 >> 1) | ((res16 >> 1) << 16);
		(st.registers[rd]) = (res0 >> 1) | (res16 << 15);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_uhadd8(cpu_state_t st, uint inst)
	{
		loginst("uhadd8", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint res0 = (((((st.registers[rn])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))) + ((((st.registers[rm])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0)))) & 0x000001fe; //与上0x000001fe的目的是，去除第4-31位，在去除低字节的0位，这样，在后面就能减少移位操作了。
		uint res8 = (((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8))) + ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8)))) & 0x000001fe;
		uint res16 = (((((st.registers[rn])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16))) + ((((st.registers[rm])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16)))) & 0x000001fe;
		uint res24 = (((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24))) + ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24)))) & 0x000001fe;
		// regv(rd) = (res0 >> 1) | ((res8 >> 1) << 8) | ((res16 >> 1) << 16) | ((res24 >> 1) << 24);
		(st.registers[rd]) = (res0 >> 1) | (res8 << 7) | (res16 << 15) | (res24 << 23);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_uhaddsubx(cpu_state_t st, uint inst)
	{
		loginst("uhaddsubx", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint res0 = (((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) - ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)))) & 0x0001fffe; //与上0x0001fffe的目的是，去除高字节的第1-31位(需要保留0位)，在去除低字节的0位，这样，在后面就能减少移位操作了。
		uint res16 = (((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) + ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)))) & 0x0001fffe;
		// regv(rd) = (res0 >> 1) | ((res16 >> 1) << 16);
		(st.registers[rd]) = (res0 >> 1) | (res16 << 15);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_uhsub16(cpu_state_t st, uint inst)
	{
		loginst("uhsub16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint res0 = (((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) - ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)))) & 0x0001fffe; //这里同uhadd16
		uint res16 = (((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) - ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)))) & 0x0001fffe;
		// regv(rd) = (res0 >> 1) | ((res16 >> 1) << 16);
		(st.registers[rd]) = (res0 >> 1) | (res16 << 15);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_uhsub8(cpu_state_t st, uint inst)
	{
		loginst("uhsub8", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint res0 = (((((st.registers[rn])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))) - ((((st.registers[rm])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0)))) & 0x000001fe; //这里同uhadd
		uint res8 = (((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8))) - ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8)))) & 0x000001fe;
		uint res16 = (((((st.registers[rn])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16))) - ((((st.registers[rm])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16)))) & 0x000001fe;
		uint res24 = (((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24))) - ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24)))) & 0x000001fe;
		// regv(rd) = (res0 >> 1) | ((res8 >> 1) << 8) | ((res16 >> 1) << 16) | ((res24 >> 1) << 24);
		(st.registers[rd]) = (res0 >> 1) | (res8 << 7) | (res16 << 15) | (res24 << 23);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_uhsubaddx(cpu_state_t st, uint inst)
	{
		loginst("uhsubaddx", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint res0 = (((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) + ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)))) & 0x0001fffe; //同uhaddsubx
		uint res16 = (((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) - ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)))) & 0x0001fffe;
		(st.registers[rd]) = (res0 >> 1) | (res16 << 15);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_umaal(cpu_state_t st, uint inst)
	{
		loginst("umaal", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rdh = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rdl = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		ulong result = (ulong)(st.registers[rm]) * (ulong)(st.registers[rs]) + (ulong)(st.registers[rdl]) + (ulong)(st.registers[rdh]);
		(st.registers[rdl]) = (uint)(result & 0x00000000ffffffff);
		(st.registers[rdh]) = (uint)(result >> 32);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_umlal(cpu_state_t st, uint inst)
	{
		loginst("umlal", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rdh = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rdl = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		uint s = (((inst) >> (20)) & 0b1);
		ulong resl = (ulong)(st.registers[rm]) * (ulong)(st.registers[rs]) + (ulong)(st.registers[rdl]);
		(st.registers[rdl]) = (uint)(resl & 0x00000000ffffffff);
		(st.registers[rdh]) = (uint)((resl >> 32) + (st.registers[rdh]));
		if (s == 1)
		{
			st.cpsr.n = ((st.registers[rdh]) >> 31) != 0;
			st.cpsr.z = (st.registers[rdh]) == 0 && (st.registers[rdl]) == 0;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_umull(cpu_state_t st, uint inst)
	{
		loginst("umull", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rdh = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rdl = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
	
		uint s = (((inst) >> (20)) & 0b1);
		ulong res = (ulong)(st.registers[rm]) * (ulong)(st.registers[rs]);
		(st.registers[rdl]) = (uint)(res & 0x00000000ffffffff);
		(st.registers[rdh]) = (uint)(res >> 32);
		if (s == 1)
		{
			st.cpsr.n = ((st.registers[rdh]) >> 31)!=0;
			st.cpsr.z = (st.registers[rdh]) == 0 && (st.registers[rdl]) == 0;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_uqadd16(cpu_state_t st, uint inst)
	{
		loginst("uqadd16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		bool issat=false;
		uint res0 = unsigned_sat(((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) + ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))), 16, ref issat);
		uint res16 = unsigned_sat(((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) + ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))), 16, ref issat);
		(st.registers[rd]) = res0 | (res16 << 16);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_uqadd8(cpu_state_t st, uint inst)
	{
		loginst("uqadd8", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		bool issat=false;
		uint res0 = unsigned_sat(((((st.registers[rn])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))) + ((((st.registers[rm])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))), 8, ref issat);
		uint res8 = unsigned_sat(((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8))) + ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8))), 8, ref issat);
		uint res16 = unsigned_sat(((((st.registers[rn])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16))) + ((((st.registers[rm])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16))), 8, ref issat);
		uint res24 = unsigned_sat(((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24))) + ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24))), 8, ref issat);
		(st.registers[rd]) = res0 | (res8 << 8) | (res16 << 16) | (res24 << 24);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_uqaddsubx(cpu_state_t st, uint inst)
	{
		loginst("uqaddsubx", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		bool issat=false;
		uint res0 = unsigned_sat(((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) - ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))), 16, ref issat);
		uint res16 = unsigned_sat(((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) + ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))), 16, ref issat);
		(st.registers[rd]) = res0 | (res16 << 16);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_uqsub16(cpu_state_t st, uint inst)
	{
		loginst("uqsub16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		bool issat=false;
		uint res0 = unsigned_sat(((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) - ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))), 16, ref issat);
		uint res16 = unsigned_sat(((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) - ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))), 16, ref issat);
		(st.registers[rd]) = res0 | (res16 << 16);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_uqsub8(cpu_state_t st, uint inst)
	{
		loginst("uqsub8", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		bool issat=false;
		uint res0 = unsigned_sat(((((st.registers[rn])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))) - ((((st.registers[rm])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))), 8, ref issat);
		uint res8 = unsigned_sat(((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8))) - ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8))), 8, ref issat);
		uint res16 = unsigned_sat(((((st.registers[rn])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16))) - ((((st.registers[rm])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16))), 8, ref issat);
		uint res24 = unsigned_sat(((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24))) - ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24))), 8, ref issat);
		(st.registers[rd]) = res0 | (res8 << 8) | (res16 << 16) | (res24 << 24);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_uqsubaddx(cpu_state_t st, uint inst)
	{
		loginst("uqsubaddx", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		bool issat=false;
		uint res0 = unsigned_sat(((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) + ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))), 16, ref issat);
		uint res16 = unsigned_sat(((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) - ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))), 16, ref issat);
		(st.registers[rd]) = res0 | (res16 << 16);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_usad8(cpu_state_t st, uint inst)
	{
		loginst("usad8", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rd = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rn = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		byte rm0 = (byte)((((st.registers[rm])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0)));
		byte rm8 = (byte)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8)));
		byte rm16 = (byte)((((st.registers[rm])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16)));
		byte rm24 = (byte)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24)));
		byte rs0 = (byte)((((st.registers[rs])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0)));
		byte rs8 = (byte)((((st.registers[rs])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8)));
		byte rs16 = (byte)((((st.registers[rs])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16)));
		byte rs24 = (byte)((((st.registers[rs])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24)));
		uint diff1 = (uint)((rm0 < rs0) ? (rs0 - rm0) : (rm0 - rs0));
		uint diff2 = (uint)((rm8 < rs8) ? (rs8 - rm8) : (rm8 - rs8));
		uint diff3 = (uint)((rm16 < rs16) ? (rs16 - rm16) : (rm16 - rs16));
		uint diff4 = (uint)((rm24 < rs24) ? (rs24 - rm24) : (rm24 - rs24));
		(st.registers[rd]) = (st.registers[rn]) + diff1 + diff2 + diff3 + diff4;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_usada8(cpu_state_t st, uint inst)
	{
		loginst("usada8", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint rd = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rs = (((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		byte rm0 = (byte)((((st.registers[rm])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0)));
		byte rm8 = (byte)((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8)));
		byte rm16 = (byte)((((st.registers[rm])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16)));
		byte rm24 = (byte)((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24)));
		byte rs0 = (byte)((((st.registers[rs])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0)));
		byte rs8 = (byte)((((st.registers[rs])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8)));
		byte rs16 = (byte)((((st.registers[rs])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16)));
		byte rs24 = (byte)((((st.registers[rs])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24)));
		uint diff1 = (uint)((rm0 < rs0) ? (rs0 - rm0) : (rm0 - rs0));
		uint diff2 = (uint)((rm8 < rs8) ? (rs8 - rm8) : (rm8 - rs8));
		uint diff3 = (uint)((rm16 < rs16) ? (rs16 - rm16) : (rm16 - rs16));
		uint diff4 = (uint)((rm24 < rs24) ? (rs24 - rm24) : (rm24 - rs24));
		(st.registers[rd]) = diff1 + diff2 + diff3 + diff4;
		return DefineConstants.EXEC_SUCCESS;
	}

	
	public static int arm_inst_usat(cpu_state_t st, uint inst)
	{
		loginst("usat", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		uint sat_imm = (((inst) << ((32) - (20) - 1)) >> ((32) - (20) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint shift_imm = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (7)));
	
		uint shift = (((inst) >> (6)) & 0b1);
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		long operand;
		if (shift == 1)
		{
			if (shift_imm == 0)
			{
				operand = (st.registers[rm]); //asr(regv(rm), 32);
			}
			else
			{
				operand = ((long)((st.registers[rm])) >> (int)(shift_imm));
			}
		}
		else
		{
			operand = (long)((ulong)((st.registers[rm])) << (int)(shift_imm));
		}
		bool issat=false;
		(st.registers[rd]) = unsigned_sat(operand, sat_imm, ref issat);
		if (issat)
		{
			st.cpsr.q = true;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_usat16(cpu_state_t st, uint inst)
	{
		loginst("usat16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint sat_imm = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		bool issat1=false;
		bool issat2=false;
		ushort rdl = (ushort)unsigned_sat(((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))), sat_imm, ref issat1);
		ushort rdh = (ushort)unsigned_sat(((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))), sat_imm, ref issat2);
		(st.registers[rd]) = (uint)((rdh << 16) | rdl);
		if (issat1 || issat2)
		{
			st.cpsr.q = true;
		}
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_usub16(cpu_state_t st, uint inst)
	{
		loginst("usub16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint ge=0;
		uint res0 = ((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) - ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		if ((((res0) & 0x10000) == 0))
		{
	
			ge |= 0b0011;
		}
		uint res16 = ((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) - ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		if ((((res16) & 0x10000) == 0))
		{
	
			ge |= 0b1100;
		}
		(st.registers[rd]) = (res0 & 0x0000ffff) | ((res16 << 16) & 0x0000ffff);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	public static int arm_inst_usub8(cpu_state_t st, uint inst)
	{
		loginst("usub8", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint ge=0;
		uint res0 = (((((st.registers[rn])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))) - ((((st.registers[rm])) << ((32) - (7) - 1)) >> ((32) - (7) - 1 + (0))));
		ge |= (!(((res0) & 0x100)!=0))?1u:0u;
		uint res8 = ((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8))) - ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (8)));
		ge |= (!(((res8) & 0x100)!=0))?1u:0u << 1;
		uint res16 = ((((st.registers[rn])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16))) - ((((st.registers[rm])) << ((32) - (23) - 1)) >> ((32) - (23) - 1 + (16)));
		ge |= (!(((res16) & 0x100) != 0))?1u:0u << 2;
		uint res24 = ((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24))) - ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (24)));
		ge |= (!(((res24) & 0x100)!=0))?1u:0u << 3;
		(st.registers[rd]) = (res0 & 0x00ff) | ((res8 << 8) & 0x00ff) | ((res16 << 16) & 0x00ff) | ((res24 << 24) & 0x00ff);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_usubaddx(cpu_state_t st, uint inst)
	{
		loginst("usubaddx", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbo
		if ((((inst) << ((32) - (8 + 3) - 1)) >> ((32) - (8 + 3) - 1 + (8))) != 0xf)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint ge=0;
		uint res0 = ((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) + ((((st.registers[rm])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16)));
		if ((((res0) & 0x10000)) != 0)
		{
	
			ge |= 0b0011;
		}
		uint res16 = ((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) - ((((st.registers[rm])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0)));
		if ((((res16) & 0x10000)) != 0)
		{
	
			ge |= 0b1100;
		}
		(st.registers[rd]) = (res0 & 0x0000ffff) | ((res16 << 16) & 0x0000ffff);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_uxtab(cpu_state_t st, uint inst)
	{
		loginst("uxtab", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (9) - 1)) >> ((32) - (9) - 1 + (8))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint rotate = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (10)));
		uint operand = (((uint)((st.registers[rm])) >>(int) (rotate << 3)) | ((uint)((st.registers[rm])) << (int)((32 - (rotate << 3))))) & 0x000000ff;
		(st.registers[rd]) = (st.registers[rn]) + operand;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_uxtab16(cpu_state_t st, uint inst)
	{
		loginst("uxtab16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (9) - 1)) >> ((32) - (9) - 1 + (8))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint rotate = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (10)));
		uint operand = (uint)((((uint)((st.registers[rm])) >> (int)(rotate << 3)) | ((uint)((st.registers[rm])) <<(int) ((32 - (rotate << 3))))) & 0x00ff00ff);
		ushort resl = (ushort)((ushort)((((st.registers[rn])) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))) + (ushort)(((operand) << ((32) - (15) - 1)) >> ((32) - (15) - 1 + (0))));
		ushort resh = (ushort)((ushort)((((st.registers[rn])) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))) + (ushort)(((operand) << ((32) - (31) - 1)) >> ((32) - (31) - 1 + (16))));
		(st.registers[rd]) = (uint)((resh << 16) | resl);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_uxtah(cpu_state_t st, uint inst)
	{
		loginst("uxtah", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (9) - 1)) >> ((32) - (9) - 1 + (8))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rn = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16)));
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint rotate = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (10)));
		uint operand = (uint)((((uint)((st.registers[rm])) >> (int)(rotate << 3)) | ((uint)((st.registers[rm])) << (int)((32 - (rotate << 3))))) & 0x0000ffff);
		(st.registers[rd]) = (st.registers[rn]) + operand;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	
	public static int arm_inst_uxtb(cpu_state_t st, uint inst)
	{
		loginst("uxtb", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (9) - 1)) >> ((32) - (9) - 1 + (8))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint rotate = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (10)));
		(st.registers[rd]) = (uint)((((uint)((st.registers[rm])) >> (int)(rotate << 3)) | ((uint)((st.registers[rm])) << (int)((32 - (rotate << 3))))) & 0x000000ff);
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_uxtb16(cpu_state_t st, uint inst)
	{
		loginst("uxtb16", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (9) - 1)) >> ((32) - (9) - 1 + (8))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint rotate = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (10)));
		(st.registers[rd]) = (((uint)((st.registers[rm])) >> (int)(rotate << 3)) | ((uint)((st.registers[rm])) << (int)((32 - (rotate << 3))))) & 0x00ff00ff;
		return DefineConstants.EXEC_SUCCESS;
	}
	
	
	public static int arm_inst_uxth(cpu_state_t st, uint inst)
	{
		loginst("uxth", inst);
		if (!check_cond(st, inst))
		{
			return DefineConstants.EXEC_SUCCESS;
		}
		//sbz
		if ((((inst) << ((32) - (9) - 1)) >> ((32) - (9) - 1 + (8))) != 0)
		{
			return DefineConstants.EXEC_UNPREDICTABLE;
		}
		uint rd = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12)));
		uint rm = (((inst) << ((32) - (0 + 3) - 1)) >> ((32) - (0 + 3) - 1 + (0)));
		uint rotate = (((inst) << ((32) - (11) - 1)) >> ((32) - (11) - 1 + (10)));
		(st.registers[rd]) = (((uint)((st.registers[rm])) >>(int) (rotate << 3)) | ((uint)((st.registers[rm])) <<(int) ((32 - (rotate << 3))))) & 0x0000ffff;
		return DefineConstants.EXEC_SUCCESS;
	}
	/*
	 * 软中断处理程序
	 * 参数：
	 * 		st		CPU状态
	 * 		nu		中断号
	 * 返回：
	 * 		0		成功
	 * 		!0		失败
	 * 		* 不过，不管返回什么，CPU依旧继续执行。
	 */
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int on_sorftware_interrupt(cpu_state_t st, uint nu);
//创建CPU
	//创建一个CPU并制定内存大小
	public static cpu_state_t cpu_create(memory_t mem)
	{
		
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
//ORIGINAL LINE: printf("cpu_create(size=%p)",__VA_ARGS__);
		Console.Write("cpu_create(size=%p)",__VA_ARGS__);
		
        //创建CPU状态
        //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
        //		cpu_state_t cpuState = (cpu_state_t)malloc(sizeof(cpu_state_t));
        //		if (cpuState != null)
        //		{
        //
        //			memset(cpuState, 0, sizeof(cpu_state_t));
        ////C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
        ////ORIGINAL LINE: cpuState->mem = mem;
        //			cpuState.mem = mem;
        //		}
        
		cpu_state_t cpuState = new cpu_state_t();
		cpuState.mem = mem;
		//ok
		return cpuState;
	}
//释放CPU
	//销毁CPU
	public static void cpu_destory(cpu_state_t st)
	{
		
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
//ORIGINAL LINE: printf("cpu_destory(st=%p)",__VA_ARGS__);
		Console.Write("cpu_destory(st=%p)",__VA_ARGS__);
		
		if (st != null)
		{
			if (st.mem != null)
			{
				mem_destory(st.mem);
			}
			free(st);
		}
	}
//取得指令
	//取出指令
	public static uint cpu_fetch_inst(cpu_state_t st)
	{

        //由于三级流水线的问题，pc应该-8才是当前的指令
        //uint inst = st.registers[DefineConstants.r_pc - 8]; //取到指令
        uint inst = mem_ld32(st.mem, st.registers[DefineConstants.r_pc]);
        st.registers[DefineConstants.r_pc] += 4; //下一条指令

       
		return inst; //返回取到的指令
	}
	//取cpsr寄存器
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//uint cpu_cpsr(cpu_state_t st);
//执行指令
	//执行指令
	public static int cpu_exec_inst(cpu_state_t st, uint inst)
	{
		//无条件语句
		if ((inst & 0xf0000000) == 0xf0000000)
		{
			//uint opcode = (((inst) << ((32) - (27) - 1)) >> ((32) - (27) - 1 + (26)));
            uint opcode = inst_bm(inst,26, 27);

            if (opcode == 0)
			{
	
				uint b16 = (((inst) >> (16)) & 0b1);
				if (b16 == 0) //cps
				{
					return arm_inst_cps(st, inst);
				}
				else //setend
				{
					return arm_inst_setend(st, inst);
				}
			}
	
			else if (opcode == 1) //pld
			{
				return arm_inst_pld(st, inst);
			}
	
			else if (opcode == 2)
			{
	
				uint b25 = (((inst) >> (25)) & 0b1);
				if (b25 == 0)
				{
	
					uint b22 = (((inst) >> (22)) & 0b1);
					if (b22 == 0) //rfe
					{
						return arm_inst_rfe(st, inst);
					}
					else //srs
					{
						return arm_inst_srs(st, inst);
					}
				}
				else //blx(1)
				{
					return arm_inst_blx_1(st, inst);
                }
			}
		}
		else
		{
			//uint idcode = (((inst) << ((32) - (27) - 1)) >> ((32) - (27) - 1 + (25))); //识别码
	        uint idcode= inst_bm(inst, 25, 27);
            if (idcode == 0 || idcode == 1) //000或001
			{
				//uint sub_idcode = (((inst) << ((32) - (4 + 3) - 1)) >> ((32) - (4 + 3) - 1 + (4))); //子识别码
                uint sub_idcode = inst_b4(inst, 4); //子识别码
                //uint opcode = (((inst) << ((32) - (21 + 3) - 1)) >> ((32) - (21 + 3) - 1 + (21))); //操作码
                uint opcode = inst_b4(inst,21); //操作码
	
				//uint s = (((inst) >> (20)) & 0b1);
				uint s = inst_b1(inst,20);
                //只有000才会是1xx1

                if (idcode == 0 && (sub_idcode & 0b1001) == 9)
				{
					//1001
	
					if (sub_idcode == 9)
					{
	
						if (opcode == 0) //mul
						{
							return arm_inst_mul(st, inst);
						}
	
						else if (opcode == 1) //mla
						{
							return arm_inst_mla(st, inst);
						}
	
						else if (opcode == 2) //umaal
						{
							return arm_inst_umaal(st, inst);
						}
	
						else if (opcode == 4) //umull
						{
							return arm_inst_umull(st, inst);
						}
	
						else if (opcode == 5) //umlal
						{
							return arm_inst_umlal(st, inst);
						}
	
						else if (opcode == 6) //smull
						{
							return arm_inst_smull(st, inst);
						}
	
						else if (opcode == 7) //smlal
						{
							return arm_inst_smlal(st, inst);
						}
	
						else if (opcode == 8) //swp
						{
							return arm_inst_swp(st, inst);
						}
	
						else if (opcode == 10) //swpb
						{
							return arm_inst_swpb(st, inst);
						}
	
						else if (opcode == 12)
						{
							if (s == 1) //ldrex
							{
								return arm_inst_ldrex(st, inst);
							}
							else //strex
							{
								return arm_inst_strex(st, inst);
							}
						}
						else //undefined
						{
							return DefineConstants.EXEC_UNPREDICTABLE;
						}
					}
					//1011
	
					else if (sub_idcode == 11)
					{
						if (s == 1) //ldrh
						{
							return arm_inst_ldrh(st, inst);
						}
						else //strh
						{
							return arm_inst_strh(st, inst);
						}
					}
					//1101
	
					else if (sub_idcode == 13)
					{
						if (s == 1) //ldrsb
						{
							return arm_inst_ldrsb(st, inst);
						}
						else //ldrd
						{
							return arm_inst_ldrd(st, inst);
						}
					}
					//1111
	
					else if (sub_idcode == 15)
					{
						if (s == 1) //ldrsh
						{
							return arm_inst_ldrsh(st, inst);
						}
						else //strd
						{
							return arm_inst_strd(st, inst);
						}
					}
				}
				//op=10xx s=0
	
				else if (s == 0 && (opcode & 0b1100) == 8)
				{
	
					uint opxx = opcode & 0b0011; //取opcode的xx位
	
					if (idcode == 1)
					{
	
						if ((opcode & 0b0001) == 1) //msr
						{
							return arm_inst_msr(st, inst);
						}
						else //undefined
						{
							return DefineConstants.EXEC_UNPREDICTABLE;
						}
					}
					//subidcode=xxx0
	
					else if ((sub_idcode & 0b0001) == 0)
					{
	
						if (sub_idcode == 2) //bxj
						{
							return arm_inst_bxj(st, inst);
						}
						//下面对opxx也只有4种情况
	
						else if (opxx == 0)
						{
	
							if (sub_idcode == 0) //msr
							{
								return arm_inst_mrs(st, inst);
							}
							else //smla<x><y>
							{
                                if (OptimeGBA.Arm.Armv5)
                                    return arm_inst_smla_x_y(st, inst);
                                else
                                    return 0;
                            }
						}
	
						else if (opxx == 1)
						{
	
							if ((sub_idcode & 0b0010) == 0) //smlaw<y>
							{
								return arm_inst_smlaw_y(st, inst);
							}
							else //smulw<y>
							{
								return arm_inst_smulw_y(st, inst);
							}
						}
	
						else if (opxx == 2) //smlal<x><y>
						{
                            if (OptimeGBA.Arm.Armv5)
                                return arm_inst_smlal_x_y(st, inst);
                            else
                                return 0;
                        }
						else //smul<x><y>
						{
                            if (OptimeGBA.Arm .Armv5)
                                return arm_inst_smul_x_y(st, inst);
                            else
                                return 0;
						}
					}
					//subidcode=0xx1 xx对应了4种情况
	
					else if ((sub_idcode & 0b1001) == 1)
					{
	
						if (sub_idcode == 1)
						{
	
							if (opxx == 1) //bx
							{
								return arm_inst_bx(st, inst);
							}
	
							else if (opxx == 3) //clz
							{
								return arm_inst_clz(st, inst);
							}
						}
	
						else if (sub_idcode == 3) //blx(2)
						{
							return arm_inst_blx_2(st, inst);
						}
	
						else if (sub_idcode == 5)
						{
	
							if (opxx == 0) //qadd
							{
								return arm_inst_qadd(st, inst);
							}
	
							else if (opxx == 1) //qsub
							{
								return arm_inst_qsub(st, inst);
							}
	
							else if (opxx == 2) //qdadd
							{
								return arm_inst_qdadd(st, inst);
							}
							else //qdsub
							{
								return arm_inst_qdsub(st, inst);
							}
						}
						else //brpt
						{
							return arm_inst_brpt(st, inst);
						}
					}
				}
				else
				{
					switch (opcode)
					{
	
					case 0://case 0b000: //and
						return arm_inst_and(st, inst);
	
					case 1://case 0b0001: //eor
						return arm_inst_eor(st, inst);
	
					case 2://case 0b0010: //sub
						return arm_inst_sub(st, inst);
	
					case 3://case 0b0011: //rsb
						return arm_inst_rsb(st, inst);
	
					case 4://case 0b0100: //add
						return arm_inst_add(st, inst);
	
					case 5://case 0b0101: //adc
						return arm_inst_adc(st, inst);
	
					case 6://case 0b0110: //sbc
						return arm_inst_sbc(st, inst);
	
					case 7://case 0b0111: //rsc
						return arm_inst_rsc(st, inst);
	
					case 8://case 0b1000: //tst
						return arm_inst_tst(st, inst);
	
					case 9://case 0b1001: //teq
						return arm_inst_teq(st, inst);
	
					case 10://case 0b1010: //cmp
						return arm_inst_cmp(st, inst);
	
					case 11://case 0b1011: //cmn
						return arm_inst_cmn(st, inst);
	
					case 12://case 0b1100: //orr
						return arm_inst_orr(st, inst);
	
					case 13://case 0b1101:
					{
						//cpy: cond 0 0 0 1 1 0 1 0 SBZ Rd 0 0 0 0 0 0 0 0 Rm
						//mov: cond 0 0 I 1 1 0 1 S SBZ Rd shifter_operand
	
						uint i = (((inst) >> (25)) & 0b1);
						if (s == 0 && i == 0 && (((inst) << ((32) - (4 + 7) - 1)) >> ((32) - (4 + 7) - 1 + (4))) == 0) //cpy
						{
							return arm_inst_cpy(st, inst);
						}
						else //mov
						{
							return arm_inst_mov(st, inst);
						}
					}
	
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not allow fall-through from a non-empty 'case':
					case 14://case 0b1110: //bic
						return arm_inst_bic(st, inst);
	
					case 15://case 0b1111: //mvn
						return arm_inst_mvn(st, inst);
					}
				}
			}
	
			else if (idcode == 2 || idcode == 3) //010或011
			{
				uint sub_idcode = (((inst) << ((32) - (4 + 3) - 1)) >> ((32) - (4 + 3) - 1 + (4))); //子识别码
				uint opcode = (((inst) << ((32) - (21 + 3) - 1)) >> ((32) - (21 + 3) - 1 + (21))); //操作码
	
				uint l = (((inst) >> (20)) & 0b1);
				uint r16 = (((inst) << ((32) - (16 + 3) - 1)) >> ((32) - (16 + 3) - 1 + (16))); //第16-19，可能是rn或rd
				uint r12 = (((inst) << ((32) - (12 + 3) - 1)) >> ((32) - (12 + 3) - 1 + (12))); //第12-15，可能是rn或rd
				//如果识别码是010 或 子识别码是xxx0表示数据加载存储指令
	
				if (idcode == 2 || (sub_idcode & 0b0001) == 0)
				{
	
					uint p = (((inst) >> (24)) & 0b1);
	
					uint b = (((inst) >> (22)) & 0b1);
	
					uint w = (((inst) >> (21)) & 0b1);
					if (l == 0)
					{
						if (b == 0)
						{
							if (p == 0 && w == 1) //strt
							{
								return arm_inst_strt(st, inst);
							}
							else //str
							{
								return arm_inst_str(st, inst);
							}
						}
						else
						{
							if (p == 0 && w == 1) //strbt
							{
								return arm_inst_strbt(st, inst);
							}
							else //strb
							{
								return arm_inst_strb(st, inst);
							}
						}
					}
					else
					{
						if (b == 0)
						{
							if (p == 0 && w == 1) //ldrt
							{
								return arm_inst_ldrt(st, inst);
							}
							else //ldr
							{
								return arm_inst_ldr(st, inst);
							}
						}
						else
						{
							if (p == 0 && w == 1) //ldrbt
							{
								return arm_inst_ldrbt(st, inst);
							}
							else //ldrb
							{
								return arm_inst_ldrb(st, inst);
							}
						}
					}
				}
				//下面根据子识别码来识别，子识别码最后一位是1因此只有8种情况
	
				else if (sub_idcode == 1)
				{
					switch (opcode)
					{
	
					case 0://case 0b000: //sadd16
						return arm_inst_sadd16(st, inst);
	
					case 1://case 0b0001:
						if (l == 0) //qadd16
						{
							return arm_inst_qadd16(st, inst);
						}
						else //shadd16
						{
							return arm_inst_shadd16(st, inst);
						}
	
					case 2://case 0b0010: //uadd16
						return arm_inst_uadd16(st, inst);
	
					case 3://case 0b0011:
						if (l == 0) //uqadd16
						{
							return arm_inst_uqadd16(st, inst);
						}
						else //uhadd16
						{
							return arm_inst_uhadd16(st, inst);
						}
	
					case 4://case 0b0100: // * pkhbt
						return arm_inst_pkhbt(st, inst);
	
					case 5://case 0b0101: // * ssat
						return arm_inst_ssat(st, inst);
	
					case 7://case 0b0111: // * usat
						return arm_inst_usat(st, inst);
	
					case 8://case 0b1000:
	
						if (r12 == 15) // * smuad
						{
							return arm_inst_smuad(st, inst);
						}
						else // * smlad
						{
							return arm_inst_smlad(st, inst);
						}
	
					case 10://case 0b1010:
						if (l == 0) // * smlald
						{
							return arm_inst_smlald(st, inst);
						}
	
						else if (r12 == 15) // * smmul
						{
							return arm_inst_smmul(st, inst);
						}
						else //smmla
						{
							return arm_inst_smmla(st, inst);
						}
	
					case 12://case 0b1100:
						//看rn是不是1111
	
						if (r12 == 15) //usad8
						{
							return arm_inst_usad8(st, inst);
						}
						else //usada8
						{
							return arm_inst_usada8(st, inst);
						}
					default:
						return DefineConstants.EXEC_UNPREDICTABLE;
					}
				}
	
				else if (sub_idcode == 3)
				{
					switch (opcode)
					{
	
					case 0://case 0b000: //saddsubx
						return arm_inst_saddsubx(st, inst);
	
					case 1://case 0b0001:
						if (l == 0) //qaddsubx
						{
							return arm_inst_qaddsubx(st, inst);
						}
						else //shaddsubx
						{
							return arm_inst_shaddsubx(st, inst);
						}
	
					case 2://case 0b0010: //uaddsubx
						return arm_inst_uaddsubx(st, inst);
	
					case 3://case 0b0011:
						if (l == 0) //uqaddsubx
						{
							return arm_inst_uqaddsubx(st, inst);
						}
						else //uhaddsubx
						{
							return arm_inst_uhaddsubx(st, inst);
						}
	
					case 5://case 0b0101:
						if (l == 0) //ssat16
						{
							return arm_inst_ssat16(st, inst);
						}
						else //rev
						{
							return arm_inst_rev(st, inst);
						}
	
					case 7://case 0b0111: //usat16
						return arm_inst_usat16(st, inst);
	
					case 8://case 0b1000:
	
						if (r12 == 15) //smuad
						{
							return arm_inst_smuad(st, inst);
						}
						else //smlad
						{
							return arm_inst_smlad(st, inst);
						}
	
					case 10://case 0b1010:
						if (l == 0) //smlald
						{
							return arm_inst_smlald(st, inst);
						}
	
						else if (r12 == 15) //smmul
						{
							return arm_inst_smmul(st, inst);
						}
						else //smmla
						{
							return arm_inst_smmla(st, inst);
						}
					default:
						return DefineConstants.EXEC_UNPREDICTABLE;
					}
				}
	
				else if (sub_idcode == 5)
				{
					switch (opcode)
					{
	
					case 0://case 0b000: //ssubaddx
						return arm_inst_ssubaddx(st, inst);
	
					case 1://case 0b0001:
						if (l == 0) //qsubaddx
						{
							return arm_inst_qsubaddx(st, inst);
						}
						else //shsubaddx
						{
							return arm_inst_shsubaddx(st, inst);
						}
	
					case 2://case 0b0010: //usubaddx
						return arm_inst_usubaddx(st, inst);
	
					case 3://case 0b0011:
						if (l == 0) //uqsubaddx
						{
							return arm_inst_uqsubaddx(st, inst);
						}
						else //uhsubaddx
						{
							return arm_inst_uhsubaddx(st, inst);
						}
	
					case 4://case 0b0100: // * pkhtb
						return arm_inst_pkhtb(st, inst);
	
					case 5://case 0b0101: //ssat
						return arm_inst_ssat(st, inst);
	
					case 7://case 0b0111: //usat
						return arm_inst_usat(st, inst);
	
					case 8://case 0b1000:
	
						if (r12 == 15) //smusd
						{
							return arm_inst_smusd(st, inst);
						}
						else //smlsd
						{
							return arm_inst_smlsd(st, inst);
						}
	
					case 10://case 0b1010: //smlsld
						return arm_inst_smlsld(st, inst);
					default:
						return DefineConstants.EXEC_UNPREDICTABLE;
					}
				}
	
				else if (sub_idcode == 7)
				{
					switch (opcode)
					{
	
					case 0://case 0b000: //ssub16
						return arm_inst_ssub16(st, inst);
	
					case 1://case 0b0001:
						if (l == 0) //qsub16
						{
							return arm_inst_qsub16(st, inst);
						}
						else //shsub16
						{
							return arm_inst_shsub16(st, inst);
						}
	
					case 2://case 0b0010: //usub16
						return arm_inst_usub16(st, inst);
	
					case 3://case 0b0011:
						if (l == 0) //uqsub16
						{
							return arm_inst_uqsub16(st, inst);
						}
						else //uhsub16
						{
							return arm_inst_uhsub16(st, inst);
						}
	
					case 4://case 0b0100:
	
						if (r16 == 15) //sxtb16
						{
							return arm_inst_sxtb16(st, inst);
						}
						else //sxtab16
						{
							return arm_inst_sxtab16(st, inst);
						}
	
					case 5://case 0b0101:
						if (l == 0)
						{
	
							if (r16 == 15) //sxtb
							{
								return arm_inst_sxtb(st, inst);
							}
							else //sxtab
							{
								return arm_inst_sxtab(st, inst);
							}
						}
						else
						{
	
							if (r16 == 15) //sxth
							{
								return arm_inst_sxth(st, inst);
							}
							else //sxtah
							{
								return arm_inst_sxtah(st, inst);
							}
						}
	
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not allow fall-through from a non-empty 'case':
					case 6://case 0b0110:
	
						if (r16 == 15) //uxtb16
						{
							return arm_inst_uxtb16(st, inst);
						}
						else //uxtab16
						{
							return arm_inst_uxtab16(st, inst);
						}
	
					case 7://case 0b0111:
						if (l == 0)
						{
	
							if (r16 == 15) //uxtb
							{
								return arm_inst_uxtb(st, inst);
							}
							else //uxtab
							{
								return arm_inst_uxtab(st, inst);
							}
						}
						else
						{
	
							if (r16 == 15) //uxth
							{
								return arm_inst_uxth(st, inst);
							}
							else //uxtah
							{
								return arm_inst_uxtah(st, inst);
							}
						}
	
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not allow fall-through from a non-empty 'case':
					case 8://case 0b1000:
	
						if (r12 == 15) //smusd
						{
							return arm_inst_smusd(st, inst);
						}
						else //smlsd
						{
							return arm_inst_smlsd(st, inst);
						}
	
					case 10://case 0b1010: //smlsld
						return arm_inst_smlsld(st, inst);
					default:
						return DefineConstants.EXEC_UNPREDICTABLE;
					}
				}
	
				else if (sub_idcode == 9)
				{
					switch (opcode)
					{
	
					case 0://case 0b000: //sadd8
						return arm_inst_sadd8(st, inst);
	
					case 1://case 0b0001:
						if (l == 0) //qadd8
						{
							return arm_inst_qadd8(st, inst);
						}
						else //shadd8
						{
							return arm_inst_shadd8(st, inst);
						}
	
					case 2://case 0b0010: //uadd8
						return arm_inst_uadd8(st, inst);
	
					case 3://case 0b0011:
						if (l == 0) //uqadd8
						{
							return arm_inst_uqadd8(st, inst);
						}
						else //uhadd8
						{
							return arm_inst_uhadd8(st, inst);
						}
	
					//case 4://case 0b0100: //pkhbt
					case 4: //pkhbt
                            return arm_inst_pkhbt(st, inst);
	
					//case 5://case 0b0101: //ssat
					case 5: //ssat
                            return arm_inst_ssat(st, inst);
	
					//case 7://case 0b0111: //usat
					case 7: //usat
                            return arm_inst_usat(st, inst);
					default:
						return DefineConstants.EXEC_UNPREDICTABLE;
					}
				}
	
				//else if (sub_idcode == 11)
				else if (sub_idcode == 11)
                {
					switch (opcode)
					{
	
					//case 4://case 0b0100: //sel
					case 4: //sel
                            return arm_inst_sel(st, inst);
	
					//case 0b0101: //rev16
					case 5: //rev16
                            return arm_inst_rev16(st, inst);
	
					//case 0b0111: //revsh
					case 7: //revsh
                            return arm_inst_revsh(st, inst);
					default:
						return DefineConstants.EXEC_UNPREDICTABLE;
					}
				}
	
	
				else if (sub_idcode == 13)
                {
					switch (opcode)
					{
	
					//case 0b0100: //pkhtb
					case 4: //pkhtb
                            return arm_inst_pkhtb(st, inst);
	
					//case 0b0101: //ssat
					case 5: //ssat
                            return arm_inst_ssat(st, inst);
	
					//case 0b0111: //usat
					case 7: //usat
                            return arm_inst_usat(st, inst);
	
					//case 0b1010: //smmls
					case 10: //smmls
                            return arm_inst_smmls(st, inst);
					default:
						return DefineConstants.EXEC_UNPREDICTABLE;
					}
				}
	
			
				else if (sub_idcode == 15)
                {
	
					//if (opcode == 15 && l == 1) //undefined
					if (opcode == 15 && l == 1) //undefined
                        {
						return DefineConstants.EXEC_UNPREDICTABLE;
					}
					switch (opcode)
					{
	
					case 0: //ssub8
						return arm_inst_ssub8(st, inst);
	
					case 1:
						if (l == 0) //qsub8
						{
							return arm_inst_qsub8(st, inst);
						}
						else //shsub8
						{
							return arm_inst_shsub8(st, inst);
						}
	
					//case 0b0010: //usub8
					case 2: //usub8
                            return arm_inst_usub8(st, inst);
	
					//case 0b0011:
					case 3:
                            if (l == 0) //uqsub8
						{
							return arm_inst_uqsub8(st, inst);
						}
						else //uhsub8
						{
							return arm_inst_uhsub8(st, inst);
						}
	
					//case 0b1010: //smmls
					case 10: //smmls
                            return arm_inst_smmls(st, inst);
					default:
						return DefineConstants.EXEC_UNPREDICTABLE;
					}
				}
			}
	
			else if (idcode == 4)
            {
	
				uint s = (((inst) >> (22)) & 0b1);
	
				uint l = (((inst) >> (20)) & 0b1);
				if (l == 0)
				{
					if (s == 0) //stm(1)
					{
						return arm_inst_stm_1(st, inst);
					}
					else //stm(2)
					{
						return arm_inst_stm_2(st, inst);
					}
				}
				else
				{
					if (s == 0) //ldm(1)
					{
						return arm_inst_ldm_1(st, inst);
					}
					else
					{
	
						uint b15 = (((inst) >> (15)) & 0b1);
						if (b15 == 0) //ldm(2)
						{
							return arm_inst_ldm_2(st, inst);
						}
						else //ldm(3)
						{
							return arm_inst_ldm_3(st, inst);
						}
					}
				}
			}
	
			else if (idcode == 5) //b,bl
            {
				return arm_inst_b_bl(st, inst);
			}
	
			else if (idcode == 6)
            {
	
				uint l = (((inst) >> (20)) & 0b1);
				uint opcode = (((inst) << ((32) - (21 + 3) - 1)) >> ((32) - (21 + 3) - 1 + (21)));
				if (l == 0)
				{
	
					if (opcode == 2) //mcrr
                        {
						return arm_inst_mcrr(st, inst);
					}
					else //stc
					{
						return arm_inst_stc(st, inst);
					}
				}
				else
				{
	
					if (opcode == 2) //mrrc
                        {
						return arm_inst_mrrc(st, inst);
					}
					else //ldr
					{
						return arm_inst_ldr(st, inst);
					}
				}
			}
	
			else if (idcode == 7)
            {
	
				uint b24 = (((inst) >> (24)) & 0b1);
				if (b24 == 0)
				{
	
					uint b4 = (((inst) >> (4)) & 0b1);
					if (b4 == 0) //cdp
					{
						return arm_inst_cdp(st, inst);
					}
					else
					{
	
						uint l = (((inst) >> (20)) & 0b1);
						if (l == 0) //mcr
						{
							return arm_inst_mcr(st, inst);
						}
						else //mrc
						{
							return arm_inst_mrc(st, inst);
						}
					}
				}
				else //swi
				{
					return arm_inst_swi(st, inst);
				}
			}
		}
		return 0;
	}
	//打印寄存器信息
	public static void cpu_print_regs(cpu_state_t st)
	{
		for (uint i = 0; i <= 15; i++)
		{
			if (i == 8)
			{
				
			}
			if (i != 0 && i != 8)
			{
				Console.Write(" ");
			}
			Console.Write("R{0:D}=0x{1:x8}", i, st.registers[i]);
		}
		sbyte[] ge_buf = new sbyte[4];
		for (int i = 0; i < 4; i++)
		{
	
			ge_buf[i] = ((((st.cpsr.ge) >> (i)) & 0b1))!=0 ? (sbyte)'1' : (sbyte)'0';
		}
		string mode_p = "";
		switch (st.cpsr.mode)
		{
	
		case 0b10000:
			mode_p = "USR";
			break;
	
		case 0b10001:
			mode_p = "FIQ";
			break;
	
		case 0b10010:
			mode_p = "IRQ";
			break;
	
		case 0b10011:
			mode_p = "SVC";
			break;
	
		case 0b10111:
			mode_p = "ABT";
			break;
	
		case 0b11011:
			mode_p = "UND";
			break;
	
		case 0b11111:
			mode_p = "SYS";
			break;
		}
		//打印cspr
		Console.Write("\nCSPR=");
		Console.Write(st.cpsr.n ? "N" : "n");
		Console.Write(st.cpsr.z ? "Z" : "z");
		Console.Write(st.cpsr.c ? "C" : "c");
		Console.Write(st.cpsr.v ? "V" : "v");
		Console.Write(st.cpsr.q ? "Q" : "q");
		Console.Write(st.cpsr.j ? "J" : "j");
		Console.Write(st.cpsr.e ? "E" : "e");
		Console.Write(st.cpsr.i ? "I" : "i");
		Console.Write(st.cpsr.f ? "F" : "f");
		Console.Write(st.cpsr.t ? "T" : "t");
		Console.Write("_");
		Console.Write("{0}", mode_p);
		Console.Write("_");
		Console.Write("GE:{0}", ge_buf);
		
	}
//取得psr寄存器的值
	//取得psr寄存器的值
	public static uint psr_ldval(cpu_psr_t psr)
	{
		uint value = 0;
		value |= (psr.n?1u:0u) << 31;
		value |= (psr.z ? 1u : 0u) << 30;
		value |= (psr.c ? 1u : 0u) << 29;
		value |= (psr.v ? 1u : 0u) << 28;
		value |= (psr.q ? 1u : 0u) << 27;
		value |= (psr.j ? 1u : 0u) << 24;
		value |= ((psr.ge & 0x0f) << 16);
		value |= (psr.e ? 1u : 0u) << 9;
		value |= (psr.a ? 1u : 0u) << 8;
		value |= (psr.i ? 1u : 0u) << 7;
		value |= (psr.f ? 1u : 0u) << 6;
		value |= (psr.t ? 1u : 0u) << 5;
		value |= (psr.mode & 0x1f);
		return value;
	}
//设置psr寄存器的值
	//设置psr寄存器的值
	public static uint psr_stval(cpu_psr_t psr, uint val)
	{
		//Gai
	
		psr.n = (((val) >> (31)) & 0b1)!=0;
	
		psr.z = (((val) >> (30)) & 0b1) != 0;
	
		psr.c = (((val) >> (29)) & 0b1) != 0;
	
		psr.v = (((val) >> (28)) & 0b1) != 0;
		
		psr.q = (((val) >> (27)) & 0b1) != 0;
		
		psr.j = (((val) >> (24)) & 0b1) != 0;
		psr.ge = (((val) << ((32) - (19) - 1)) >> ((32) - (19) - 1 + (16)));
	
		psr.e = (((val) >> (9)) & 0b1) != 0;
		
		psr.a = (((val) >> (8)) & 0b1) != 0;
		
		psr.i = (((val) >> (7)) & 0b1) != 0;
		
		psr.f = (((val) >> (6)) & 0b1) != 0;
		
		psr.t = (((val) >> (5)) & 0b1) != 0;
		psr.mode = (((val) << ((32) - (4) - 1)) >> ((32) - (4) - 1 + (0)));
		return val;
	}
	
	
	
	//ORIGINAL LINE: #define call_inst(ins_name) arm_inst_##ins_name(st, inst)
	/*
		指令整理：
	
		000,001:
			子识别码=1001
					mul				cond 0 0 0 0 0 0 0 S Rd SBZ Rs 1 0 0 1 Rm
					mla				cond 0 0 0 0 0 0 1 S Rd Rn Rs 1 0 0 1 Rm
					umaal			cond 0 0 0 0 0 1 0 0 RdHi RdLo Rs 1 0 0 1 Rm
					umull			cond 0 0 0 0 1 0 0 S RdHi RdLo Rs 1 0 0 1 Rm
					umlal			cond 0 0 0 0 1 0 1 S RdHi RdLo Rs 1 0 0 1 Rm
					smull			cond 0 0 0 0 1 1 0 S RdHi RdLo Rs 1 0 0 1 Rm
					smlal			cond 0 0 0 0 1 1 1 S RdHi RdLo Rs 1 0 0 1 Rm
					swp				cond 0 0 0 1 0 0 0 0 Rn Rd SBZ 1 0 0 1 Rm
					swpb			cond 0 0 0 1 0 1 0 0 Rn Rd SBZ 1 0 0 1 Rm
					strex			cond 0 0 0 1 1 0 0 0 Rn Rd SBO 1 0 0 1 Rm
					ldrex			cond 0 0 0 1 1 0 0 1 Rn Rd SBO 1 0 0 1 SBO
			子识别码=1011
					ldrh			cond 0 0 0 P U I W 1 Rn Rd addr_mode 1 0 1 1 addr_mode
					strh			cond 0 0 0 P U I W 0 Rn Rd addr_mode 1 0 1 1 addr_mode
			子识别码=1101
					ldrsb			cond 0 0 0 P U I W 1 Rn Rd addr_mode 1 1 0 1 addr_mode
					ldrd			cond 0 0 0 P U I W 0 Rn Rd addr_mode 1 1 0 1 addr_mode
			子识别码=1111
					ldrsh			cond 0 0 0 P U I W 1 Rn Rd addr_mode 1 1 1 1 addr_mode
					strd			cond 0 0 0 P U I W 0 Rn Rd addr_mode 1 1 1 1 addr_mode
			;
			
					msr				cond 0 0 1 1 0 R 1 0 field_mask SBO rotate_imm 8_bit_immediate
					mrs				cond 0 0 0 1 0 R 0 0 SBO Rd SBZ
					msr				cond 0 0 0 1 0 R 1 0 field_mask SBO SBZ 0 0 0 0 Rm
	
					bx				cond 0 0 0 1 0 0 1 0 SBO SBO SBO 0 0 0 1 Rm
					clz				cond 0 0 0 1 0 1 1 0 SBO Rd SBO 0 0 0 1 Rm
					blx(2)			cond 0 0 0 1 0 0 1 0 SBO SBO SBO 0 0 1 1 Rm
					qadd			cond 0 0 0 1 0 0 0 0 Rn Rd SBZ 0 1 0 1 Rm
					qsub			cond 0 0 0 1 0 0 1 0 Rn Rd SBZ 0 1 0 1 Rm
					qdadd			cond 0 0 0 1 0 1 0 0 Rn Rd SBZ 0 1 0 1 Rm
					qdsub			cond 0 0 0 1 0 1 1 0 Rn Rd SBZ 0 1 0 1 Rm
					brpt			cond 0 0 0 1 0 0 1 0 immed 0 1 1 1 immed (cond = 1110)
	
					bxj				cond 0 0 0 1 0 0 1 0 SBO SBO SBO 0 0 1 0 Rm
					smla<x><y>		cond 0 0 0 1 0 0 0 0 Rd Rn Rs 1 y x 0 Rm
					smlaw<y>		cond 0 0 0 1 0 0 1 0 Rd Rn Rs 1 y 0 0 Rm
					smulw<y>		cond 0 0 0 1 0 0 1 0 Rd SBZ Rs 1 y 1 0 Rm
					smlal<x><y>		cond 0 0 0 1 0 1 0 0 RdHi RdLo Rs 1 y x 0 Rm
					smul<x><y>		cond 0 0 0 1 0 1 1 0 Rd SBZ Rs 1 y x 0 Rm
	
					and				cond 0 0 I 0 0 0 0 S Rn Rd shifter_operand
					eor				cond 0 0 I 0 0 0 1 S Rn Rd shifter_operand
					sub				cond 0 0 I 0 0 1 0 S Rn Rd shifter_operand
					rsb				cond 0 0 I 0 0 1 1 S Rn Rd shifter_operand
					add				cond 0 0 I 0 1 0 0 S Rn Rd shifter operand
					adc				cond 0 0 I 0 1 0 1 S Rn Rd shifter_operand
					sbc				cond 0 0 I 0 1 1 0 S Rn Rd shifter_operand
					rsc				cond 0 0 I 0 1 1 1 S Rn Rd shifter_operand
					tst				cond 0 0 I 1 0 0 0 1 Rn SBZ shifter_operand
					teq				cond 0 0 I 1 0 0 1 1 Rn SBZ shifter_operand
					cmp				cond 0 0 I 1 0 1 0 1 Rn SBZ shifter_operand
					cmn				cond 0 0 I 1 0 1 1 1 Rn SBZ shifter_operand
					orr				cond 0 0 I 1 1 0 0 S Rn Rd shifter_operand
					mov				cond 0 0 I 1 1 0 1 S SBZ Rd shifter_operand
					cpy				cond 0 0 0 1 1 0 1 0 SBZ Rd 0 0 0 0 0 0 0 0 Rm
					bic				cond 0 0 I 1 1 1 0 S Rn Rd shifter_operand
					mvn				cond 0 0 I 1 1 1 1 S SBZ Rd shifter_operand
			;
	
		010,011
			识别码=011
				B[24-20] = 11111, B[7-4]=1111
					未定义
				B[24]=0, 子识别码=0001
					sadd16			cond 0 1 1 0 0 0 0 1 Rn Rd SBO 0 0 0 1 Rm
					qadd16			cond 0 1 1 0 0 0 1 0 Rn Rd SBO 0 0 0 1 Rm
					shadd16			cond 0 1 1 0 0 0 1 1 Rn Rd SBO 0 0 0 1 Rm
					uadd16			cond 0 1 1 0 0 1 0 1 Rn Rd SBO 0 0 0 1 Rm
					uqadd16			cond 0 1 1 0 0 1 1 0 Rn Rd SBO 0 0 0 1 Rm
					uhadd16			cond 0 1 1 0 0 1 1 1 Rn Rd SBO 0 0 0 1 Rm
					usada8			cond 0 1 1 1 1 0 0 0 Rd Rn Rs 0 0 0 1 Rm
					usad8			cond 0 1 1 1 1 0 0 0 Rd 1 1 1 1 Rs 0 0 0 1 Rm
				B[24]=0, 子识别码=0011
					saddsubx		cond 0 1 1 0 0 0 0 1 Rn Rd SBO 0 0 1 1 Rm
					qaddsubx		cond 0 1 1 0 0 0 1 0 Rn Rd SBO 0 0 1 1 Rm
					shaddsubx		cond 0 1 1 0 0 0 1 1 Rn Rd SBO 0 0 1 1 Rm
					uaddsubx		cond 0 1 1 0 0 1 0 1 Rn Rd SBO 0 0 1 1 Rm
					uqaddsubx		cond 0 1 1 0 0 1 1 0 Rn Rd SBO 0 0 1 1 Rm
					uhaddsubx		cond 0 1 1 0 0 1 1 1 Rn Rd SBO 0 0 1 1 Rm
					ssat16			cond 0 1 1 0 1 0 1 0 sat_imm Rd SBO 0 0 1 1 Rm
					rev				cond 0 1 1 0 1 0 1 1 SBO Rd SBO 0 0 1 1 Rm
					usat16			cond 0 1 1 0 1 1 1 0 sat_imm Rd SBO 0 0 1 1 Rm
				B[24]=0, 子识别码=0101
					ssubaddx		cond 0 1 1 0 0 0 0 1 Rn Rd SBO 0 1 0 1 Rm
					qsubaddx		cond 0 1 1 0 0 0 1 0 Rn Rd SBO 0 1 0 1 Rm
					shsubaddx		cond 0 1 1 0 0 0 1 1 Rn Rd SBO 0 1 0 1 Rm
					usubaddx		cond 0 1 1 0 0 1 0 1 Rn Rd SBO 0 1 0 1 Rm
					uqsubaddx		cond 0 1 1 0 0 1 1 0 Rn Rd SBO 0 1 0 1 Rm
					uhsubaddx		cond 0 1 1 0 0 1 1 1 Rn Rd SBO 0 1 0 1 Rm
				B[24]=0, 子识别码=0111
					ssub16			cond 0 1 1 0 0 0 0 1 Rn Rd SBO 0 1 1 1 Rm
					qsub16			cond 0 1 1 0 0 0 1 0 Rn Rd SBO 0 1 1 1 Rm
					shsub16			cond 0 1 1 0 0 0 1 1 Rn Rd SBO 0 1 1 1 Rm
					usub16			cond 0 1 1 0 0 1 0 1 Rn Rd SBO 0 1 1 1 Rm
					uqsub16			cond 0 1 1 0 0 1 1 0 Rn Rd SBO 0 1 1 1 Rm
					uhsub16			cond 0 1 1 0 0 1 1 1 Rn Rd SBO 0 1 1 1 Rm
					sxtab16			cond 0 1 1 0 1 0 0 0 Rn Rd rotate SBZ 0 1 1 1 Rm
					sxtb16			cond 0 1 1 0 1 0 0 0 1 1 1 1 Rd rotate SBZ 0 1 1 1 Rm
					sxtab			cond 0 1 1 0 1 0 1 0 Rn Rd rotate SBZ 0 1 1 1 Rm
					sxtb			cond 0 1 1 0 1 0 1 0 1 1 1 1 Rd rotate SBZ 0 1 1 1 Rm
					sxtah			cond 0 1 1 0 1 0 1 1 Rn Rd rotate SBZ 0 1 1 1 Rm
					sxth			cond 0 1 1 0 1 0 1 1 1 1 1 1 Rd rotate SBZ 0 1 1 1 Rm
					uxtab16			cond 0 1 1 0 1 1 0 0 Rn Rd rotate SBZ 0 1 1 1 Rm
					uxtb16			cond 0 1 1 0 1 1 0 0 1 1 1 1 Rd rotate SBZ 0 1 1 1 Rm
					uxtab			cond 0 1 1 0 1 1 1 0 Rn Rd rotate SBZ 0 1 1 1 Rm
					uxtb			cond 0 1 1 0 1 1 1 0 1 1 1 1 Rd rotate SBZ 0 1 1 1 Rm
					uxtah			cond 0 1 1 0 1 1 1 1 Rn Rd rotate SBZ 0 1 1 1 Rm
					uxth			cond 0 1 1 0 1 1 1 1 1 1 1 1 Rd rotate SBZ 0 1 1 1 Rm
				B[24]=0, 子识别码=1001
					sadd8			cond 0 1 1 0 0 0 0 1 Rn Rd SBO 1 0 0 1 Rm
					qadd8			cond 0 1 1 0 0 0 1 0 Rn Rd SBO 1 0 0 1 Rm
					shadd8			cond 0 1 1 0 0 0 1 1 Rn Rd SBO 1 0 0 1 Rm
					uadd8			cond 0 1 1 0 0 1 0 1 Rn Rd SBO 1 0 0 1 Rm
					uqadd8			cond 0 1 1 0 0 1 1 0 Rn Rd SBO 1 0 0 1 Rm
					uhadd8			cond 0 1 1 0 0 1 1 1 Rn Rd SBO 1 0 0 1 Rm
				B[24]=0, 子识别码=1011
					sel				cond 0 1 1 0 1 0 0 0 Rn Rd SBO 1 0 1 1 Rm
					rev16			cond 0 1 1 0 1 0 1 1 SBO Rd SBO 1 0 1 1 Rm
					revsh			cond 0 1 1 0 1 1 1 1 SBO Rd SBO 1 0 1 1 Rm
				B[24]=0, 子识别码=1111
					ssub8			cond 0 1 1 0 0 0 0 1 Rn Rd SBO 1 1 1 1 Rm
					qsub8			cond 0 1 1 0 0 0 1 0 Rn Rd SBO 1 1 1 1 Rm
					shsub8			cond 0 1 1 0 0 0 1 1 Rn Rd SBO 1 1 1 1 Rm
					usub8			cond 0 1 1 0 0 1 0 1 Rn Rd SBO 1 1 1 1 Rm
					uqsub8			cond 0 1 1 0 0 1 1 0 Rn Rd SBO 1 1 1 1 Rm
					uhsub8			cond 0 1 1 0 0 1 1 1 Rn Rd SBO 1 1 1 1 Rm
				B[24]=0, 子识别码归纳到上面去(属于上面的情况)
					pkhbt			cond 0 1 1 0 1 0 0 0 Rn Rd shift_imm 0 0 1 Rm			0001 1001
					pkhtb			cond 0 1 1 0 1 0 0 0 Rn Rd shift_imm 1 0 1 Rm			0101 1101
					ssat			cond 0 1 1 0 1 0 1 sat_imm Rd shift_imm sh 0 1 Rm		0001 0101 1001 1101
					usat			cond 0 1 1 0 1 1 1 sat_imm Rd shift_imm sh 0 1 Rm		0001 0101 1001 1101
				B[24]=1，子识别码=xxx1
					smlad			cond 0 1 1 1 0 0 0 0 Rd Rn Rs 0 0 X 1 Rm				0001 0011
					smuad			cond 0 1 1 1 0 0 0 0 Rd 1 1 1 1 Rs 0 0 X 1 Rm			0001 0011
					smlsd			cond 0 1 1 1 0 0 0 0 Rd Rn Rs 0 1 X 1 Rm				0101 0111
					smusd		`	cond 0 1 1 1 0 0 0 0 Rd 1 1 1 1 Rs 0 1 X 1 Rm			0101 0111
					smlald			cond 0 1 1 1 0 1 0 0 RdHi RdLo Rs 0 0 X 1 Rm			0001 0011
					smlsld			cond 0 1 1 1 0 1 0 0 RdHi RdLo Rs 0 1 X 1 Rm			0101 0111
					smmla			cond 0 1 1 1 0 1 0 1 Rd Rn Rs 0 0 R 1 Rm				0001 0011
					smmls			cond 0 1 1 1 0 1 0 1 Rd Rn Rs 1 1 R 1 Rm				1101 1111
					smmul			cond 0 1 1 1 0 1 0 1 Rd 1 1 1 1 Rs 0 0 R 1 Rm			0001 0011
	
			识别码=010 | 子识别码=xxx0
					ldr				cond 0 1 I P U 0 W 1 Rn Rd addr_mode
					ldrb			cond 0 1 I P U 1 W 1 Rn Rd addr_mode
					ldrbt			cond 0 1 I 0 U 1 1 1 Rn Rd addr_mode
					ldrt			cond 0 1 I 0 U 0 1 1 Rn Rd addr_mode
					str				cond 0 1 I P U 0 W 0 Rn Rd addr_mode
					strb			cond 0 1 I P U 1 W 0 Rn Rd addr_mode
					strbt			cond 0 1 I 0 U 1 1 0 Rn Rd addr_mode
					strt			cond 0 1 I 0 U 0 1 0 Rn Rd addr_mode
			;
	
		100
					ldm				cond 1 0 0 P U 0 W 1 Rn register_list
					ldm(2)			cond 1 0 0 P U 1 0 1 Rn 0 register_list
					ldm(3)			cond 1 0 0 P U 1 W 1 Rn 1 register_list
					stm(1)			cond 1 0 0 P U 0 W 0 Rn register_list
					stm(2)			cond 1 0 0 P U 1 0 0 Rn register_list
			;
	
		101
					b,bl			cond 1 0 1 L signed_immed_24
			;
	
		110
					ldc				cond 1 1 0 P U N W 1 Rn CRd cp_num 8_bit_word_offset
					mrrc			cond 1 1 0 0 0 1 0 1 Rn Rd cp_num opcode CRm
					stc				cond 1 1 0 P U N W 0 Rn CRd cp_num 8_bit_word_offset
					mcrr			cond 1 1 0 0 0 1 0 0 Rn Rd cp_num opcode CRm
			;
	
		111
			B[24]=0
					cdp				cond 1 1 1 0 opcode_1 CRn CRd cp_num opcode_2 0 CRm
					mcr				cond 1 1 1 0 opcode_1 0 CRn Rd cp_num opcode_2 1 CRm
					mrc				cond 1 1 1 0 opcode_1 1 CRn Rd cp_num opcode_2 1 CRm
			B[24]=1
					swi				cond 1 1 1 1 immed_24
	
		条件限定指令 cond=1111
					cps				cond 0 0 0 1 0 0 0 0 imod mmod 0 SBZ A I F 0 mode			[16]=0
					setend			cond 0 0 0 1 0 0 0 0 0 0 0 1 SBZ E SBZ 0 0 0 0 SBZ			[16] = 1
					pld				cond 0 1 I 1 U 1 0 1 Rn 1 1 1 1 addr_mode
					rfe				cond 1 0 0 P U 0 W 1 Rn SBZ 1 0 1 0 SBZ
					srs				cond 1 0 0 P U 1 W 0 1 1 0 1 SBZ 0 1 0 1 SBZ mode
					blx(1)			cond 1 0 1 H signed_immed_24
	*/
	
	
	//ORIGINAL LINE: #define mem_ld(len, addr) (*(len *)(mem->buffer + (addr)))
	
	//ORIGINAL LINE: #define mem_st(len, addr, value) (*(len *)(mem->buffer + (addr)) = (value))
	//创建内存
	public unsafe static memory_t mem_create(uint size)
	{
		
		//Console.Write("mem_create(size=0x{0:x8})",__VA_ARGS__);
		Console.Write("mem_create(size=0x{0:x8})", size);
		
		
		//ORIGINAL LINE: byte *buffer = (byte *)malloc(size);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
		//		byte buffer = (byte)malloc(size);
		//		if (buffer == null)
		//		{
		//			return null;
		//		}
		////C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
		//		memory_t mem = (memory_t)malloc(sizeof(memory_t));
		//		if (mem == null)
		//		{
		//
		//			free(buffer);
		//			return null;
		//		}
		//
		//		memset(buffer, 0, size);
		//
		//		memset(mem, 0, sizeof(memory_t));
		byte[] buffer = malloc(size);
		memory_t mem = new memory_t();
		mem.buffer = buffer;
		mem.bufferP = (byte *)getBytePtr(mem.buffer, 0);
		mem.memSize = size;
		vm_mem_buf = mem.bufferP;
		return mem;
	}
	public static string __VA_ARGS__ = " GlobalMembers";
	//销毁内存
	public static void mem_destory(memory_t mem)
	{
		
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
//ORIGINAL LINE: printf("mem_destory(mem=%p)",__VA_ARGS__);
		Console.Write("mem_destory(mem=%p)",__VA_ARGS__);
		
		if (mem != null)
		{
			if (mem.buffer != null)
			{
				free(mem.buffer);
			}
			free(mem);
		}
	}
    public static int WarningNum;
	//获取一个32位的数据
	public static uint mem_ld32(memory_t mem, uint addr)
	{
        uint addr_align = (addr >> 2) << 2; //对齐的地址(32位(4字节，所以除以4)对齐)
	
		uint addr_shift = (addr & 0b11) << 3; //需要左移的位数 = 偏移的地址*8 (?一个字节8位)
											  //从该地址取出数据
		uint result = 0;                          //uint result = ((uint)(mem.buffer + (addr_align)));
		
		try
		{
			result = *(uint*)(mem.bufferP + addr_align);
		}
		catch (Exception e)
        {
            WarningNum++;
            if (WarningNum > 10)
                GameStart.Exit();
			else if (WarningNum == 20)
				UnityEngine.Debug.LogWarning("vm_run Warning: InstIndex:" + InstIndex + "  addr_align:" + addr_align + "  WarningInfo:  " + e.Message);

		}

		//进行循环左移
		return (uint)((((result) >> (int)(addr_shift)) | ((result) << (int)((32 - (addr_shift))))));
	}
	//获取一个16位的数据
	public static ushort mem_ld16(memory_t mem, uint addr)
	{
		uint addr_align = (addr >> 1) << 1; //对齐的地址(16位(2字节，所以除以2)对齐)
	
		uint addr_shift = (addr & 0b01) << 3; //需要左移的位数 = 偏移的地址*8 (?一个字节8位)
		//从该地址取出数据
		ushort result = *((ushort*)(mem.bufferP+ addr_align));
       
        //进行循环左移
        return (ushort)((((result) >> (int)(addr_shift)) | ((result) << (ushort)((16 - (addr_shift))))));
		
	}
	//获取一个8位的数据
	public static byte mem_ld8(memory_t mem, uint addr)
	{
        return *((mem.bufferP + (addr)));
		//return ((byte)(mem.buffer[addr]));
	}
	//存储一个32位的数据
	public static void mem_st32(memory_t mem, uint addr, uint value)
	{
        uint p = (uint)((addr >> 2) << 2);

        if (addr < mem.buffer.Length)
        {
            uint i = *((uint*)(mem.bufferP + p));
          
            *((uint*)(mem.bufferP + p)) = (uint)(value);
        }
        else
            UnityEngine.Debug.LogWarning("mem_st32: "+addr);
    }
	//存储一个16位的数据
	public static void mem_st16(memory_t mem, uint addr, uint value)
    {
		ushort v = (ushort)value;
        *((ushort*)(mem.bufferP + ((addr >> 1) << 1)) )= v;
	}
	//存储一个8位的数据
	public static void mem_st8(memory_t mem, uint addr, uint value)
	{
		*((byte*)(mem.bufferP + (addr))) = (byte)(value);
	}

    

    //ORIGINAL LINE: #define logsysc(fmt, ...) printf("[SYSCAL] "); println(fmt, ##__VA_ARGS__)

    //ORIGINAL LINE: #define mr_ret(val) (vm->cpu->registers[0] = (val))

    //ORIGINAL LINE: #define vm.mem->mr_state (vm->mem->mr_state)

    //ORIGINAL LINE: #define vm_mem_offset(addr) ((uint8 *)(addr) - (uint8 *)(vm->cpu->mem->buffer))

    //ORIGINAL LINE: #define vm_mem_buf (vm->cpu->mem->buffer)

    //ORIGINAL LINE: #define vmreg(i) (vm->cpu->registers[i])

    //ORIGINAL LINE: #define vmstack(i) (*((uint32 *)(vm_mem_buf + vmreg(r_sp)) + i))

    //ORIGINAL LINE: #define MR_SPRITE_INDEX_MASK (0x03FF)

    //ORIGINAL LINE: #define MR_SPRITE_TRANSPARENT (0x0400)
    public static void dev_pup_stach(vm_info_st vm)
	{
		//sbyte[] outfile = new sbyte[1024];
		//outfile = string.Format("{0}/stack.txt", DefineConstants.DEV_OUTPUT_DIR);
		//FILE fd = fopen(outfile, "w+");
		//fwrite(vm.cpu.mem.buffer, 1, vm.cpu.mem.memSize, fd);
		//fclose(fd);
	}
//打开ELF文件
	/**
	 * 打开ELF文件
	 * 参数：
	 * 		filename		文件名
	 * 返回：
	 * 		!=null		成功
	 * 		null		失败
	 */
	public static elf_t elf_open(string filename)
	{
        //打开文件
        FILE fp = fopen(filename, "rb");
        if (fp == null)
        {
            return null;
        }
        //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
        elf_t elf = new elf_t();
        if (elf == null)
        {
            fclose(fp);
            return null;
        }
        //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
        //ORIGINAL LINE: elf->fp = fp;
        elf.fp = fp;
        return elf;
        //return new elf_t();
	}
//关闭ELF文件
	/**
	 * 关闭ELF文件
	 * 参数：
	 * 		elf		elf文件
	 */
	public static void elf_close(elf_t elf)
	{
		if (elf != null)
		{
			if (elf.fp != null)
			{
				fclose(elf.fp);
			}
			free(elf);
		}
	}
//读取ELF头
	/**
	 * 读取ELF头
	 * 参数：
	 * 		elf		elf文件
	 * 		head	头结构
	 * 返回：
	 * 		0		成功
	 * 		-1		失败
	 * 		-2		不是elf文件
	 */
	public unsafe static uint elf_read_head(elf_t elf,ref elf_head_t head)
	{
        //正常再读取
        if ((elf != null && elf.fp != null))
        {
            if (-1 == fseek(elf.fp, 0, SEEK_SET))
            {
                return uint.MaxValue;
            }
            //读取
            
            uint readed = freadElf(out head, 1, sizeof(elf_head_t), elf.fp);
            if (readed != sizeof(elf_head_t))
            {
                //memset(head, 0, sizeof(elf_head_t));
                return uint.MaxValue;
            }
            //检测是不是elf文件
            //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'memcmp' has no equivalent in C#:
            //if (head.magic.type[0] != 0x7f || memcmp(head.magic.type.Substring(1), "ELF", 3) != 0)
            fixed(sbyte* type= head.magic.type)
            if (head.magic.type[0] != 0x7f || String(type ).Contains("ELF"))
            {

                //memset(head, 0, sizeof(elf_head_t));
                return uint.MaxValue;
            }
            return 0;
        }
        //否则直接失败

        return uint.MaxValue;
    }
//打印头
	/**
	 * 打印elf头
	 */
	public static void elf_print_head(elf_head_t head)
	{
        
        
            
            string[] head_type_dict = {"", "ET_REL", "ET_EXEC", "ET_DYN"};
			Console.Write("ELF_HEAD:\n");
			Console.Write("  MAGIC:\n");
			Console.Write("    type:     7f 45 4c 46\n");
			Console.Write("    endian:   {0}\n", (head.magic.endian == 1) ? "small" : "big");
			Console.Write("    version:  {0:D}\n", head.magic.version);
			Console.Write("    bit:      {0:D}\n", (head.magic.bits == 1) ? 32 : 64);
			Console.Write("  TYPE:                              {0}\n", head_type_dict[head.e_type]);
			Console.Write("  MACHINE:                           {0:D}\n", head.e_machine);
			Console.Write("  VERSION:                           {0:D}\n", head.e_version);
			Console.Write("  ENTRY:                             0x{0:x8}({1:D})\n", head.e_entry, head.e_entry);
			Console.Write("  PROGRAM HEADER OFFSET:             0x{0:x8}({1:D})\n", head.e_phoff, head.e_phoff);
			Console.Write("  SECTION HEADER OFFSET:             0x{0:x8}({1:D})\n", head.e_shoff, head.e_shoff);
			Console.Write("  FLAGS:                             0x{0:x8}({1:D})\n", head.e_flags, head.e_flags);
			Console.Write("  HEADER SIZE:                       0x{0:x8}({1:D})\n", head.e_ehsize, head.e_ehsize);
			Console.Write("  PROGRAM HEADER SIZE:               0x{0:x8}({1:D})\n", head.e_phentsize, head.e_phentsize);
			Console.Write("  PROGRAM HEADERS NUM:               0x{0:x8}({1:D})\n", head.e_phnum, head.e_phnum);
			Console.Write("  SECTION HEADER SIZE:               0x{0:x8}({1:D})\n", head.e_shentsize, head.e_shentsize);
			Console.Write("  SECTION HEADERS NUM:               0x{0:x8}({1:D})\n", head.e_shnum, head.e_shnum);
			Console.Write("  SECTION HEADER STRING TABLE INDEX: 0x{0:x8}({1:D})\n", head.e_shstrndx, head.e_shstrndx);
			
		
	}
//读取段头列表
	/**
	 * 获取所有的段头
	 * 参数：
	 * 		elf		elf文件
	 * 		head	elf头信息
	 * 		shs		段头列表的指针（这个指针指向多个段哦）
	 * 返回：
	 * 		0		成功
	 * 		-1		失败
	 */
	public static uint elf_read_sec_heads(elf_t elf, elf_head_t head, elf_sec_head_t* shs)
	{
        if ((elf != null && elf.fp != null) )
        {
            if (-1 == fseek(elf.fp, head.e_shoff, SEEK_SET))
            {
                return 1;
            }
            int size = head.e_shnum * sizeof(elf_sec_head_t);
            if (size != fread( shs, 1, size, elf.fp))
            {
                return 1;
            }
            return 0;
        }
        return 1;
	}
//打印段头
	/**
	 * 打印段头
	 * 参数：
	 * 		elf			elf文件（如果是null则不会打印名称）
	 * 		sh			头信息
	 * 		index		位置信息
	 * 		has_th		是否打印表头
	 */
	public static void elf_print_sec_head(elf_t elf, elf_head_t head, elf_sec_head_t* shs, uint index, bool has_th)
	{
//		elf_sec_head_t sh = shs + index;
//		if (sh != null)
//		{
//			if (has_th)
//			{
//				Console.Write("[Nr] Name              Addr      Off       Size      Flg\n");
//			}
//			if (sh != null)
//			{
//				sbyte[] name = new sbyte[16];
//				sbyte[] flag = new sbyte[4];
//				//读取名称
//				if (elf != null && sh.sh_type != DefineConstants.SHT_NULL)
//				{
//					if (0 == fseek(elf.fp, (shs + head.e_shstrndx).sh_offset + sh.sh_name, SEEK_SET))
//					{
//						if (sizeof(sbyte) != fread(name, 1, sizeof(sbyte), elf.fp))
//						{
//
//							memset(name, 0, sizeof(sbyte));
//						}
//					}
//				}
//				//取得TAG
//				if ((sh.sh_flags & DefineConstants.SHF_WRITE) == DefineConstants.SHF_WRITE)
//				{
//					flag = string.Format("{0}{1}", flag, 'W');
//				}
//				if ((sh.sh_flags & DefineConstants.SHF_ALLOC) == DefineConstants.SHF_ALLOC)
//				{
//					flag = string.Format("{0}{1}", flag, 'A');
//				}
//				if ((sh.sh_flags & DefineConstants.SHF_EXECINSTR) == DefineConstants.SHF_EXECINSTR)
//				{
//					flag = string.Format("{0}{1}", flag, 'X');
//				}
////C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not allow setting maximum string width in format specifiers:
////ORIGINAL LINE: printf("[%2d] %-16.16s  %-8x  %-8x  %-8x  %3s\n", index, name, sh->sh_addr, sh->sh_offset, sh->sh_size, flag);
//				Console.Write("[{0,2:D}] {1,-16}  {2,-8:x}  {3,-8:x}  {4,-8:x}  {5,3}\n", index, name, sh.sh_addr, sh.sh_offset, sh.sh_size, flag);
//			}
//		}
	}
	
	//ORIGINAL LINE: #define elf_ok(elf) (elf != null && elf->fp != null)
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	//ORIGINAL LINE: #define logsysc(fmt, ...) printf("[SYSCAL] "); println(fmt, ##__VA_ARGS__)
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	//ORIGINAL LINE: #define mr_ret(val) (vm->cpu->registers[0] = (val))
	
	//ORIGINAL LINE: #define vm.mem->mr_state (vm->mem->mr_state)
	
	//ORIGINAL LINE: #define vm_mem_offset(addr) ((uint8 *)(addr) - (uint8 *)(vm->cpu->mem->buffer))
	
	//ORIGINAL LINE: #define vm_mem_buf (vm->cpu->mem->buffer)
	
	//ORIGINAL LINE: #define vmreg(i) (vm->cpu->registers[i])
	
	//ORIGINAL LINE: #define vmstack(i) (*((uint32 *)(vm_mem_buf + vmreg(r_sp)) + i))
	public unsafe static void swi_mr_memcpy(vm_info_st vm)
	{
		uint dst = vm.cpu.registers[0]; //本身就是返回值
		uint src = vm.cpu.registers[1];
		uint n = vm.cpu.registers[2];
		if (((int)n) <= 0)
		{
            string d = String((sbyte*)(vm.cpu.mem.bufferP + dst));
            string s = String((sbyte*)(vm.cpu.mem.bufferP + src));
			//n = (uint)s.Length;
            Console.Write("mr_memcpy(dst={0}, src={1})", d, s);
			return;
        }
        Console.Write("mr_memcpy(dst=0x{0:x8}, src=0x{1:x8}, n={2:D})", dst, src, n);
        memcpy(vm.cpu.mem.buffer, dst,vm.cpu.mem.buffer ,src, n);
	}
	public static void swi_mr_memmove(vm_info_st vm)
	{
		uint dst = vm.cpu.registers[0]; //本身就是返回值
		uint src = vm.cpu.registers[1];
		uint n = vm.cpu.registers[2];
        //string d = String((sbyte*)(vm.cpu.mem.bufferP + dst));
        //string s = String((sbyte*)(vm.cpu.mem.bufferP + src));
        //Console.Write("mr_memmove(dst={0}, src={1})", d, s);
        Console.Write("mr_memmove(dst=0x{0:x8}, src=0x{1:x8}, n={2:D})", dst,src,n);
		
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'memmove' has no equivalent in C#:
		//memmove(((object)((vm.cpu.mem.buffer) + (dst))), ((object)((vm.cpu.mem.buffer) + (src))), n);
		memmove(vm.cpu.mem.buffer,dst, vm.cpu.mem.buffer,src, n);
	}
	public static void swi_mr_memset(vm_info_st vm)
	{
		uint s = vm.cpu.registers[0]; //本身就是返回值
		uint ch = vm.cpu.registers[1];
		uint n = vm.cpu.registers[2];
        
        //string sr = String((sbyte*)(vm.cpu.mem.bufferP + s));
        //Console.Write("mr_memset(src={0})", sr);
        Console.Write("mr_memset(s=0x{0:x8}, ch={1:D}, n={2:D})", s, ch, n);
        if(ch==uint.MaxValue)
        {

        }
        memset(((vm.cpu.mem.bufferP) + (s)), (sbyte)ch, n);
        
	}
	public static void swi_mr_memcmp(vm_info_st vm)
	{
		uint s1 = vm.cpu.registers[0];
		uint s2 = vm.cpu.registers[1];
		uint n = vm.cpu.registers[2];
        //string d = String(vm.cpu.mem.buffer , s1,(int)n);
        //string s = String(vm.cpu.mem.buffer , s2,(int)n);
        //Console.Write("mr_memcmp(s1={0}, s2={1})", d, s);
        Console.Write("mr_memcmp(s1=0x{0:x8}, s2=0x{1:x8}, n={2:D})", s1, s2, n);
        //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'memcmp' has no equivalent in C#:
        //(vm.cpu.registers[0] = (memcmp(((object)((vm.cpu.mem.buffer) + (s1))), ((object)((vm.cpu.mem.buffer) + (s2))), n))); //比较并返回结果
        vm.cpu.registers[0] = memcmp(vm.cpu.mem.buffer,s1, vm.cpu.mem.buffer,s2, n); //比较并返回结果
	}
	public static void swi_mr_memchr(vm_info_st vm)
	{
		uint s = vm.cpu.registers[0]; //本身就是返回值
		byte ch = (byte)vm.cpu.registers[1];
		uint n = vm.cpu.registers[2];
		
		Console.Write("mr_memchr(s=0x{0:x8}, ch={1:D}, n={2:D})", s, ch, n);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'memchr' has no equivalent in C#:
		//memchr(((object)((vm.cpu.mem.buffer) + (s))), ch, n);
		vm.cpu.registers[0]= memchr(vm.cpu.mem.buffer,s, ch, n);
	}
	public static void swi_mr_strcpy(vm_info_st vm)
	{
		uint dst = vm.cpu.registers[0]; //本身就是返回值
		uint src = vm.cpu.registers[1];
        if(GameStart .isPrint )
			Console.Write("mr_strcpy(dst={0}, src={1})", String((sbyte*)(vm.cpu.mem.bufferP + dst)), String((sbyte*)(vm.cpu.mem.bufferP + src)));
        strcpy(((sbyte*)((vm.cpu.mem.bufferP) + (dst))), ((sbyte*)((vm.cpu.mem.bufferP) + (src))));
	}
	public static void swi_mr_strncpy(vm_info_st vm)
	{
		uint dst = vm.cpu.registers[0]; //本身就是返回值
		uint src = vm.cpu.registers[1];
		uint n = vm.cpu.registers[2];
		if (GameStart.isPrint)
			Console.Write("mr_strncpy(dst={0}, src={1})", String((byte*)(vm.cpu.mem.bufferP + dst),(int)n), String((byte*)(vm.cpu.mem.bufferP + src),(int)n));
        strcpy(((sbyte*)((vm.cpu.mem.bufferP) + (dst))), ((sbyte*)((vm.cpu.mem.bufferP) + (src))),n);
	}
	public static void swi_mr_strcat(vm_info_st vm)
	{
		uint dst = vm.cpu.registers[0]; //本身就是返回值
		uint src = vm.cpu.registers[1];

		if (GameStart.isPrint)
			Console.Write("mr_strncat(dst={0}, src={1})", String((sbyte*)(vm.cpu.mem.bufferP + dst))+"  p:"+ dst, String((sbyte*)(vm.cpu.mem.bufferP + src)) + "  p:" + src);
        strcat(((sbyte*)((vm.cpu.mem.bufferP) + (dst))), ((sbyte*)((vm.cpu.mem.bufferP) + (src))));
	
	}
	public static void swi_mr_strncat(vm_info_st vm)
	{
		uint dst = vm.cpu.registers[0]; //本身就是返回值
		uint src = vm.cpu.registers[1];
		uint n = vm.cpu.registers[2];
		if (GameStart.isPrint)
			Console.Write("mr_strncat(dst={0}, src={1}), n={2:D}", String((sbyte*)(vm.cpu.mem.bufferP + dst)) + "  p:" + dst, String((sbyte*)(vm.cpu.mem.bufferP + src)) + "  p:" + src,n);

        strcat(((sbyte*)((vm.cpu.mem.bufferP) + (dst))), ((sbyte*)((vm.cpu.mem.bufferP) + (src))),n);
	}
	public static void swi_mr_strcmp(vm_info_st vm)
	{
		uint s1 = vm.cpu.registers[0];
		uint s2 = vm.cpu.registers[1];
        string s11 = String(vm.cpu.mem.buffer, s1);
        string s21 = String(vm.cpu.mem.buffer, s2);
        Console.Write("mr_strcmp(s1={0}  pos={1}, s2={2}  pos={3})", s11,s1, s21,s2);
		
		vm.cpu.registers[0] = (uint)(string.Compare(s11, s21));
	}
	public static void swi_mr_strncmp(vm_info_st vm)
	{
		uint s1 = vm.cpu.registers[0];
		uint s2 = vm.cpu.registers[1];
		uint n = vm.cpu.registers[2];
		
		Console.Write("mr_strncmp(s1={0}, s2={1}, n={2:D})", s1, s2,n);
        vm.cpu.registers[0] = (uint)(string.Compare(String(vm.cpu.mem.buffer, s1),0, String(vm.cpu.mem.buffer, s2),0,(int)n));
	}
	public static void swi_mr_strcoll(vm_info_st vm)
	{
		uint s1 = vm.cpu.registers[0];
		uint s2 = vm.cpu.registers[1];
		
		Console.Write("mr_strcoll(s1={0}, s2={1})", s1, s2);
        vm.cpu.registers[0] = (uint)(string.Compare(String(vm.cpu.mem.buffer,s1),String(vm.cpu.mem.buffer,s2)));
	}
	public static void swi_mr_strlen(vm_info_st vm)
	{
		uint str = vm.cpu.registers[0];
		string s = String(vm.cpu.mem.buffer, str);
		Console.Write("mr_strlen(str={0})",s);
		//vm.cpu.registers[0] = (uint)(String(vm.cpu.mem.buffer,str).Length);
        vm.cpu.registers[0] = _strnlen_s((sbyte*)getBytePtr(vm.cpu.mem.buffer,str));

    }
	public unsafe static void swi_mr_strstr(vm_info_st vm)
	{
		uint haystack = vm.cpu.registers[0];
		uint needle = vm.cpu.registers[1];
		
		Console.Write("mr_strstr(haystack={0}, needle={1})", haystack, needle);
        //Gai
        //ORIGINAL LINE: sbyte *ret = strstr(((const sbyte *)((vm->cpu->mem->buffer) + (haystack))), ((const sbyte *)((vm->cpu->mem->buffer) + (needle))));
        //sbyte ret = StringFunctions.StrStr(((string)((vm.cpu.mem.buffer) + (haystack))), ((string)((vm.cpu.mem.buffer) + (needle))));
        //vm.cpu.registers[0] = (((byte)(ret) - (byte)(vm.cpu.mem.buffer))); 
        //string ret = StringFunctions.StrStr(((string)((vm.cpu.mem.buffer) + (haystack))), ((string)((vm.cpu.mem.buffer) + (needle))));
        //string ret = StringFunctions.StrStr((String(vm.cpu.mem.buffer,haystack)), (String(vm.cpu.mem.buffer,needle)));
        //byte* c = (byte *)&ret;
        //vm.cpu.registers[0] =(uint) ((((byte *)c) - (vm.cpu.mem.bufferP)));
        int i= StringFunctions.StrStr(String(vm.cpu.mem.buffer, haystack), String(vm.cpu.mem.buffer, needle), 0);
		if (i > 0)
		{
			vm.cpu.registers[0] = (uint)(i+ haystack);
		}
	}
	public static void swi_mr_atoi(vm_info_st vm)
	{
		uint s = vm.cpu.registers[0];
		string value = String(vm.cpu.mem.buffer, s);
		//uint v = *(uint*)getBytePtr(vm.cpu.mem.buffer, s);

		Console.Write("mr_atoi(s={0},value={1})", s, value);

		if (value == "" || s == 0)
		{
			UnityEngine.Debug.LogError(string.Format("mr_atoi(s={0},value={1})", s, value));
			value = "0";
		}
		//value= System.Text.RegularExpressions.Regex.Replace(value, @"[^0-9]+", "");
		vm.cpu.registers[0] = _atoi(value);

		//vm.cpu.registers[0] = (uint)Convert.ToInt32(value);
		//      try
		//      {
		//	Convert.ToInt32(value);
		//}
		//      catch
		//      {

		//      }
	}
	public static void swi_mr_strtoul(vm_info_st vm)
	{
        logsysc("swi_mr_strtoul");
		uint str = vm.cpu.registers[0];
		string s = String(vm.cpu.mem.buffer, str);
		Console.Write("mr_strlen(str={0})", s);
		
	}
	public static void swi_mr_rand(vm_info_st vm)
	{
		logsysc("mr_rand()");
		vm.cpu.registers[0] = (uint)RandomNumbers.NextNumber();
        //vm.cpu.registers[0] = (uint)RandomNumbers.NextNumber((int)swi_mr_getTime(vm));
	}
	public static unsafe void swi_mr_sprintf(vm_info_st vm)
	{
		//原型： (char *buf, const char *fmt, ...) -> int
//ORIGINAL LINE: sbyte *buf = ((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[0]))));
		sbyte* bufP = ((sbyte*)((vm.cpu.mem.bufferP) + ((vm.cpu.registers[0]))));
		//ORIGINAL LINE: sbyte *fmt = ((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[1]))));
		sbyte* fmt = ((sbyte*)((vm.cpu.mem.bufferP) + ((vm.cpu.registers[1]))));
        if(GameStart .isPrint )
			Console.Write("mr_sprintf(buf=0x{0:x8}, fmt={1})", String(bufP), String(fmt));
        //构建参数
        //arg_list arg = new arg_list(8, (vm.cpu.registers[0]), (vm.cpu.registers[1]), (vm.cpu.registers[2]), (vm.cpu.registers[3]));
        byte[] date = new byte[sizeof(arg_list)];
		arg_list* arg = (arg_list*)getBytePtr(date);
		arg->n = 8;
		for(int i=0;i<4;i++)
		  arg->regs[i] = vm.cpu.registers[i];
		//ORIGINAL LINE: byte *stack = (vm->cpu->mem->buffer) + (vm->cpu->registers[DefineConstants.r_sp]);
		byte* stack = (vm.cpu.mem.bufferP) + (vm.cpu.registers[DefineConstants.r_sp]);
        uint v1 = arg->regs[1];
        uint v2 = arg->regs[2];
        memcpy(arg->stack, stack,0, (uint)DefineConstants.FMT_STACK_SIZE);
        arg_list arg2 = *arg;
        //调用一下printf
        int ret = fmt_sprintf( bufP,  fmt, ref vm.cpu.mem.buffer,  arg);
		if (GameStart.isPrint)
			print("sprintf: "+ret.ToString());
		vm.cpu.registers[0] = (uint)(ret);
	}
	public static void swi_mr_printf(vm_info_st vm)
	{
        //原型： (const char *format,...) -> void
        //ORIGINAL LINE: sbyte *fmt = ((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[0]))));
        sbyte* fmt = (sbyte*)getBytePtr (vm.cpu.mem.buffer,vm.cpu.registers[0]);
        if(GameStart .isPrint )
			Console.Write("mr_printf(fmt={0})", String(fmt));
        //构建参数
        //arg_list arg = new arg_list(4, (vm.cpu.registers[0]), (vm.cpu.registers[1]), (vm.cpu.registers[2]), (vm.cpu.registers[3]));
        byte[] date = new byte[sizeof(arg_list)];
		arg_list* arg = (arg_list*)getBytePtr(date);
		arg->n = 4;
		for (int i = 0; i < 4; i++)
			arg->regs[i] = vm.cpu.registers[i];
        uint v1 = arg->regs[1];
        uint v2= arg->regs[2];
        //ORIGINAL LINE: byte *stack = (vm->cpu->mem->buffer) + (vm->cpu->registers[DefineConstants.r_sp]);
        //byte stack = (vm.cpu.mem.buffer) + (vm.cpu.registers[DefineConstants.r_sp]);
        //memcpy(arg.stack, stack, DefineConstants.FMT_STACK_SIZE);
        memcpy(arg->stack,0, vm.cpu.mem.buffer, vm.cpu.registers[DefineConstants.r_sp], DefineConstants.FMT_STACK_SIZE);
        //调用一下printf
        arg_list arg2 = *arg;
        fmt_printf( fmt, ref (vm.cpu.mem.buffer),arg);
	}
	public static void swi_mr_wstrlen(vm_info_st vm)
	{
		uint s = vm.cpu.registers[0];
//ORIGINAL LINE: sbyte *str = ((sbyte *)((vm->cpu->mem->buffer) + (s)));
		sbyte* sb = ((sbyte*)((vm.cpu.mem.bufferP) + (s)));
		//string str = String(vm.cpu.mem.buffer,s);
		
		Console.Write("mr_wstrlen(str={0})",__VA_ARGS__);
		
		int lenth = 0;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged:
		byte * ss = (byte*)sb;
		while (((*ss << 8) + *(ss + 1)) != 0)
		{
			lenth += 2;
			ss += 2;
		}
		vm.cpu.registers[0] = (uint)(lenth);
	}
	
	//ORIGINAL LINE: #define MR_SPRITE_INDEX_MASK (0x03FF)
	
	//ORIGINAL LINE: #define MR_SPRITE_TRANSPARENT (0x0400)
	public static void swi_mr_getScreenInfo(vm_info_st vm)
	{
		//原型： (mr_screeninfo *s) -> int32
		uint _s = (vm.cpu.registers[0]);
		mr_screeninfo_t* s = ((mr_screeninfo_t*)((vm.cpu.mem.bufferP) + (_s)));
		//mr_screeninfo_t s = GetObject<mr_screeninfo_t>(vm.cpu.mem.buffer,_s);
		
		Console.Write("mr_getScreenInfo(s=0x{0:x8})", _s);
		
		s->width = (vm.mem->mr_state).sysinfo.screen_width;
		s->height = (vm.mem->mr_state).sysinfo.screen_height;
		s->bit = (vm.mem->mr_state).sysinfo.screen_bits;
		vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS);
	}
	
	//ORIGINAL LINE: #define MR_SPRITE_INDEX_MASK (0x03FF)
	
	//ORIGINAL LINE: #define MR_SPRITE_TRANSPARENT (0x0400)
	public static void swi_mr_drawRect(vm_info_st vm)
	{
		//原型： (int16 x, int16 y, int16 w, int16 h, uint8 r, uint8 g, uint8 b) -> void
		int x = (int)(vm.cpu.registers[0]);
		int y = (int)(vm.cpu.registers[1]);
		int w = (int)(vm.cpu.registers[2]);
		int h = (int)(vm.cpu.registers[3]);
        byte r = (byte)vmstack(0);
        byte g = (byte)vmstack(1);
        byte b = (byte)vmstack(2);
        
		Console.Write("mr_drawRect(x={0:D}, y={1:D}, w={2:D}, h={3:D}, r={4:D}, g={5:D}, b={6:D})", x, y, w, h, r, g, b);
        //处理一下位置
        if (w == 0 || h == 0)
		{
			return;
		}
		if (w < 0)
		{
			x -= w = (((w) >= 0) ? (w) : -(w));
		}
		if (h < 0)
		{
			y -= h = (((h) >= 0) ? (h) : -(h));
		}
		//处理一下绘制范围
		int minx = ((x) > (0) ? (x) : (0));
		int miny = ((y) > (0) ? (y) : (0));
		int maxx = (((vm.mem->mr_state).sysinfo.screen_width) > (x + w) ? (x + w) : (int)((vm.mem->mr_state).sysinfo.screen_width));
		int maxy = (((vm.mem->mr_state).sysinfo.screen_height) > (y + h) ? (y + h) : (int)((vm.mem->mr_state).sysinfo.screen_height));
		ushort color = (ushort)(((uint)(r >> 3) << 11) + ((uint)(g >> 2) << 5) + ((uint)(b >> 3)));
		//先绘制第一行
		for (int dx = minx; dx < maxx; dx++)
		{
			//*(vm.mem->video + (miny) * (vm.mem->mr_state).sysinfo.screen_width + (dx)) = color;
			vm.mem->video [(miny) * (vm.mem->mr_state).sysinfo.screen_width + (dx)] = color;
		}
		//其他行的跟着拷贝就行了
//ORIGINAL LINE: ushort *line1 = (vm->mem->video + (miny)*(vm->mem->mr_state).sysinfo.screen_width + (minx));
		//ushort line1 = (vm.mem->video + (miny) * (vm.mem->mr_state).sysinfo.screen_width + (minx));
		int line1 =(int)((miny) * (vm.mem->mr_state).sysinfo.screen_width + (minx));
		for (int dy = miny + 1; dy < maxy; dy++)
		{
			//memcpy((vm.mem->video + (dy) * (vm.mem->mr_state).sysinfo.screen_width + (minx)), line1, (maxx - minx) << 1);
			//fixed (ushort* v = vm.mem->video)
				ushort* v = vm.mem->video;
				memcpy(v, (int)((dy) * (vm.mem->mr_state).sysinfo.screen_width + (minx)),v, line1, (maxx - minx) << 1);
		}
	}
	public unsafe static void swi_mr_drawText(vm_info_st vm)
	{
        //原型： (char* pcText, int16 x, int16 y, uint8 r, uint8 g, uint8 b, int is_unicode, uint16 font) -> int32
        //ORIGINAL LINE: sbyte *pcText = ((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[0]))));
        //sbyte* pcText = ((string)((vm.cpu.mem.buffer) + ((vm.cpu.registers[0]))));
        byte* pcText = ((byte*)(vm.cpu.mem.bufferP + vm.cpu.registers[0]));
		uint x = (vm.cpu.registers[1]);
		uint y = (vm.cpu.registers[2]);
		byte r = (byte)(vm.cpu.registers[3]);
        //byte g = ((uint)((vm.cpu.mem.buffer) + (vm.cpu.registers[DefineConstants.r_sp])) + 0);
        //byte b = ((uint)((vm.cpu.mem.buffer) + (vm.cpu.registers[DefineConstants.r_sp])) + 1);
        byte g = (byte)vmstack(0);
        byte b = (byte)vmstack(1);
        uint is_unicode = (uint)vmstack(2);
        ushort font = (ushort)vmstack(3);
        if(GameStart .isPrint )
		Console.Write("mr_drawText(pText={0}, x={1:D}, y={2:D}, r={3:D}, g={4:D}, b={5:D}, is_unicode={6:D}, font={7:D})",
           String((sbyte*)pcText), x, y, r, g, b, is_unicode, font);
        uint len=0;
		int err=0;
		ushort color = (ushort)(((uint)(r >> 3) << 11) + ((uint)(g >> 2) << 5) + ((uint)(b >> 3)));
		if (is_unicode == 0)
		{
			pcText = (byte*)mr_c2u(pcText, ref err, ref len);
            //pcText = GB2Unicode(pcText);
        }
		font_init(vm);
		uint sx = x;
        //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged:
        byte* p = pcText;
        while ((*p)!=0 || (*(p + 1))!=0)
		{
			ushort ch;
            ch = (ushort)((*p << 8) + *(p + 1));
            font_ch_draw(vm, sx, y, ch, color);
            sx += font_ch_width(vm, ch);
            p += 2;
            if (sx > (vm.mem->mr_state).sysinfo.screen_width)
			{
				break;
			}
		}
		if (is_unicode == 0)
		{
			free(pcText);
		}
		vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS);
	}
	public static void swi_mr_drawTextEx(vm_info_st vm)
	{
		//原型： (char* pcText, int16 x, int16 y, mr_screenRectSt rect, mr_colourSt colorst, int flag, uint16 font) -> int32
//ORIGINAL LINE: sbyte *text = ((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[0]))));
		string text = String((sbyte*)(vm.cpu.mem.bufferP + vm.cpu.registers[0]));
		int x = (int)(vm.cpu.registers[1]);
		int y = (int)(vm.cpu.registers[2]);
		int rx = (int)(vm.cpu.registers[3]);
        uint ry = vmstack(0);
        uint rw = vmstack(1);
        uint rh = vmstack(2);
        logsysc("mr_drawTextEx(text=%s, x=%d, y=%d, rect={%d,%d,%d,%d})", text);
		vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS);
	}
	public static void swi_mr_refreshBuffer(vm_info_st vm)
	{
		//原型： (uint16 *bmp, int16 x, int16 y, uint16 w, uint16 h) -> void
		uint _mbp = (vm.cpu.registers[0]);
//ORIGINAL LINE: ushort *bmp = ((ushort *)((vm->cpu->mem->buffer) + (_mbp)));
		ushort* bmp = ((ushort*)((vm.cpu.mem.bufferP) + (_mbp)));
		uint x = (vm.cpu.registers[1]);
        uint y = (vm.cpu.registers[2]);
        uint w = (vm.cpu.registers[3]);
        var h = (uint)vmstack(0);
        //logsysc("mr_refreshBuffer(bmp=0x%08x, x=%d, y=%d, w=%d, h=%d)", _mbp);
        //调用函数进行刷新
        if (vm.callbacks.onBufferRefresh == null)
        {
            logw("no screen refresh callback provided, ignore!");
            return;
        }
        vm.callbacks.onBufferRefresh(vm, bmp, x, y, w, h);
    }
	public static void swi_mr_drawPoint(vm_info_st vm)
	{
		//原型： (int16 x, int16 y, uint16 nativecolor) -> void
		uint x = (vm.cpu.registers[0]);
		uint y = (vm.cpu.registers[1]);
		ushort color = (ushort)(vm.cpu.registers[2]);
		// logsysc("mr_drawPoint(x=%d, y=%d, color=0x%04x)", x, y, color);
		if (x >= 0 && y >= 0 && x < (vm.mem->mr_state).sysinfo.screen_width && y < (vm.mem->mr_state).sysinfo.screen_height)
		{
			//*(vm.mem->video + (y) * (vm.mem->mr_state).sysinfo.screen_width + (x)) = color;
			vm.mem->video [(y) * (vm.mem->mr_state).sysinfo.screen_width + (x)] = color;
		}
	}
    public static void swi_mr_timeStart(vm_info_st vm)
    {
        uint x = vm.cpu.registers[0];
		if(GameStart.isLog)
           print("TimeStart: " + x);
        GameStart.Ins.StartTimer(x);
    }
    public static void swi_mr_timeStop(vm_info_st vm)
    {
		if (GameStart.isPrint)
			print("TimeStop ");
        GameStart.Ins.StopTimer();
    }

    public static uint swi_mr_getTime(vm_info_st vm)
    {
        uint value= mr_getTime(vm);
		uint addr = vm.cpu.registers[0];
		if(GameStart .isPrint)
	        UnityEngine.Debug .LogWarning("GetTime : " + value+ "  addr : " + addr);
		//GlobalMembers.mem_st32(GlobalMembers.vm.cpu.mem, addr, value);
		//vm.cpu.registers[0] = addr;

		return value;
    }

    public static void swi_mr_getCharBitmap(vm_info_st vm)
	{
		//原型： (uint16 ch, uint16 fontSize, int *width, int *height) -> const char*
		uint ch = (vm.cpu.registers[0]);
		uint fontSize = (vm.cpu.registers[1]);
		uint _width = (vm.cpu.registers[2]);
		uint _height = (vm.cpu.registers[3]);
		
		Console.Write("mr_getCharBitmap(ch={0:D}, fontSize={1:D}, width=0x{2:x8}, height=0x{3:x8})", ch, fontSize, _width, _height);
        font_init(vm);
        *(uint*)vmpt_real((uint)_width) = font_ch_width(vm, (int)ch);
        *(uint*)vmpt_real((uint)_height) = vm.mem->font.size;
        //ORIGINAL LINE: byte *addr = font_get_bitmap(vm, ch);
        byte* addr = font_get_bitmap(vm, (int)ch);
		vm.cpu.registers[0] = (uint)(vm_mem_offset(addr));
    }
	public static void swi_mr_platDrawChar(vm_info_st vm)
	{
		//原型： (uint16 ch, int32 x, int32 y, int32 color) -> void
		ushort ch =(ushort) (vm.cpu.registers[0]);
		ushort x = (ushort)(vm.cpu.registers[1]);
		ushort y = (ushort)(vm.cpu.registers[2]);
		ushort color = (ushort)(vm.cpu.registers[3]);
		
		Console.Write("mr_platDrawChar(ch={0:D}, x={1:D}, y={2:D}, color={3:D})", ch, x, y, color);
        font_ch_draw(vm, x, y, ch, color);
	}
	public unsafe static void swi_mr_drawBitmap(vm_info_st vm)
	{
		//原型： (uint16* p, int16 x, int16 y, uint16 w, uint16 h, uint16 rop, uint16 transcoler, int16 sx, int16 sy, int16 mw) -> void
		uint _p = (vm.cpu.registers[0]);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged:
		ushort* p = ((ushort*)((vm.cpu.mem.bufferP) + (_p)));
		uint x = (vm.cpu.registers[1]);
		uint y = (vm.cpu.registers[2]);
		uint w = (vm.cpu.registers[3]);

		ushort h = (ushort)vmstack(0);
		ushort rop = (ushort)vmstack(1);
		ushort transcoler = (ushort)vmstack(2);
		short sx = (short)vmstack(3);
		short sy = (short)vmstack(4);
		short mw = (short)vmstack(5);
		if (GameStart.isPrint)
			Console.Write("mr_drawBitmap(p=0x{0:x8}, x={1:D}, y={2:D}, w={3:D}, h={4:D}, rop={5:D}, transcoler={6:D}, sx={7:D}, sy={8:D}, mw={9:D})", _p, x, y, w, h, rop, transcoler, sx, sy, mw);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged:
		//ushort * dstp;
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged:
		//ushort * srcp;
		ushort* dstp;
		ushort* srcp;
		uint MaxY = (((vm.mem->mr_state).sysinfo.screen_height) > (y + h) ? (y + h) : ((vm.mem->mr_state).sysinfo.screen_height));
		uint MaxX = (((vm.mem->mr_state).sysinfo.screen_width) > (x + w) ? (x + w) : ((vm.mem->mr_state).sysinfo.screen_width));
		uint MinY = ((0) > (y) ? (0) : (y));
		uint MinX = ((0) > (x) ? (0) : (x));
		uint dx;
		uint dy;
		if (rop > (0x0400))
		{
			int BitmapRop = (ushort)(rop & (0x03FF));
			int BitmapMode = (rop >> DefineConstants.MR_TILE_SHIFT) & 0x3;
			int BitmapFlip = (rop >> DefineConstants.MR_TILE_SHIFT) & 0x4;
			switch ((AnonymousEnum)BitmapRop)
			{
				case AnonymousEnum.BM_TRANSPARENT:
					for (dy = MinY; dy < MaxY; dy++)
					{
						//fixed (ushort* v = vm.mem->video)
						{
							ushort* v = vm.mem->video;
							dstp = (v + (dy) * (vm.mem->mr_state).sysinfo.screen_width + (MinX));
						}
						srcp = p + (dy - y) * w + (MinX - x);
						for (dx = MinX; dx < MaxX; dx++)
						{
							if (*srcp != transcoler)
							{
								*dstp = *srcp;
							}
							dstp++;
							srcp++;
						}
					}
					break;
				case AnonymousEnum.BM_COPY:
					switch (BitmapMode)
					{
						case DefineConstants.MR_ROTATE_0:
							if (MaxX > MinX)
							{
								for (dy = MinY; dy < MaxY; dy++)
								{
									//fixed (ushort* v = vm.mem->video)
									ushort* v = vm.mem->video;
									dstp = (v + (dy) * (vm.mem->mr_state).sysinfo.screen_width + (MinX));
									srcp = BitmapFlip != 0 ? p + (h - 1 - (dy - y)) * w + (MinX - x) : p + (dy - y) * w + (MinX - x);
									memcpy(dstp, srcp, (uint)(MaxX - MinX) << 1);
								}
							}
							break;
						case DefineConstants.MR_ROTATE_90:
							for (dy = MinY; dy < MaxY; dy++)
							{
								//fixed (ushort* v = vm.mem->video)
								ushort* v = vm.mem->video;
								dstp = (v + (dy) * (vm.mem->mr_state).sysinfo.screen_width + (MinX));
								srcp = BitmapFlip != 0 ? p + (h - 1 - (MinX - x)) * w + (w - 1 - (dy - y)) : p + (MinX - x) * w + (w - 1 - (dy - y));
								for (dx = MinX; dx < MaxX; dx++)
								{
									*dstp = *srcp;
									dstp++;
									srcp = BitmapFlip != 0 ? srcp - w : srcp + w;
								}
							}
							break;
						case DefineConstants.MR_ROTATE_180:
							for (dy = MinY; dy < MaxY; dy++)
							{
								//fixed (ushort* v = vm.mem->video)
								ushort* v = vm.mem->video;
								dstp = (v + (dy) * (vm.mem->mr_state).sysinfo.screen_width + (MinX));
								srcp = BitmapFlip != 0 ? p + (dy - y) * w + (w - 1 - (MinX - x)) : p + (h - 1 - (dy - y)) * w + (w - 1 - (MinX - x));
								for (dx = MinX; dx < MaxX; dx++)
								{
									*dstp = *srcp;
									dstp++;
									srcp--;
								}
							}
							break;
						case DefineConstants.MR_ROTATE_270:
							for (dy = MinY; dy < MaxY; dy++)
							{
								//fixed (ushort* v = vm.mem->video)
								ushort* v = vm.mem->video;
								dstp = (v + (dy) * (vm.mem->mr_state).sysinfo.screen_width + (MinX));
								srcp = BitmapFlip != 0 ? p + (MinX - x) * w + (dy - y) : p + (h - 1 - (MinX - x)) * w + (dy - y);
								for (dx = MinX; dx < MaxX; dx++)
								{
									*dstp = *srcp;
									dstp++;
									srcp = BitmapFlip != 0 ? srcp + w : srcp - w;
								}
							}
							break;
					}
					break;
			}
		}
		else
		{
			switch ((AnonymousEnum)rop)
			{
				case AnonymousEnum.BM_TRANSPARENT:
					for (dy = MinY; dy < MaxY; dy++)
					{
						//fixed (ushort* v = vm.mem->video)
						ushort* v = vm.mem->video;
						dstp = (v + (dy) * (vm.mem->mr_state).sysinfo.screen_width + (MinX));
						srcp = p + (dy - y + sy) * mw + (MinX - x + sx);
						for (dx = MinX; dx < MaxX; dx++)
						{
							if (*srcp != transcoler)
							{
								*dstp = *srcp;
							}
							dstp++;
							srcp++;
						}
					}
					break;
				case AnonymousEnum.BM_COPY:
					if (MaxX > MinX)
					{
						for (dy = MinY; dy < MaxY; dy++)
						{
							//fixed (ushort* v = vm.mem->video)
							ushort* v = vm.mem->video;
							dstp = (v + (dy) * (vm.mem->mr_state).sysinfo.screen_width + (MinX));
							srcp = p + (dy - y + sy) * mw + (MinX - x + sx);

							memcpy(dstp, srcp, (uint)(MaxX - MinX) << 1);
						}
					}
					break;
				case AnonymousEnum.BM_GRAY:
				case AnonymousEnum.BM_OR:
				case AnonymousEnum.BM_XOR:
				case AnonymousEnum.BM_NOT:
				case AnonymousEnum.BM_MERGENOT:
				case AnonymousEnum.BM_ANDNOT:
				case AnonymousEnum.BM_AND:
				case AnonymousEnum.BM_REVERSE:
					for (dy = MinY; dy < MaxY; dy++)
					{
						//fixed (ushort* v = vm.mem->video)
						ushort* v = vm.mem->video;
						dstp = (v + (dy) * (vm.mem->mr_state).sysinfo.screen_width + (MinX));
						srcp = p + (dy - y + sy) * mw + (MinX - x + sx);
						for (dx = MinX; dx < MaxX; dx++)
						{
							switch ((AnonymousEnum)rop)
							{
								case AnonymousEnum.BM_GRAY:
									if (*srcp != transcoler)
									{
										uint color_old = *srcp;
										uint r;
										uint g;
										uint b;
#if MR_SCREEN_CACHE_BITMAP
								r = ((color_old & 0x7c00) >> 10);
								g = ((color_old & 0x3e0) >> 5);
								b = ((color_old & 0x1f));
#else
										r = ((color_old & 0xf800) >> 11);
										g = ((color_old & 0x7e0) >> 6);
										b = ((color_old & 0x1f));
#endif
										r = (r * 60 + g * 118 + b * 22) / 25;
										*dstp = (ushort)(((uint)(r >> 3) << 11) + ((uint)(r >> 2) << 5) + ((uint)(r >> 3)));
									}
									break;
								case AnonymousEnum.BM_REVERSE:
									if (*srcp != transcoler)
									{
										*dstp = (ushort)~*srcp;
									}
									break;
								case AnonymousEnum.BM_OR:
									*dstp = (ushort)((*srcp) | (*dstp));
									break;
								case AnonymousEnum.BM_XOR:
									*dstp = (ushort)((*srcp) ^ (*dstp));
									break;
								case AnonymousEnum.BM_NOT:
									*dstp = (ushort)(~(*srcp));
									break;
								case AnonymousEnum.BM_MERGENOT:
									*dstp = (ushort)((~*srcp) | (*dstp));
									break;
								case AnonymousEnum.BM_ANDNOT:
									*dstp = (ushort)((~*srcp) & (*dstp));
									break;
								case AnonymousEnum.BM_AND:
									*dstp = (ushort)((*srcp) & (*dstp));
									break;
							}
							dstp++;
							srcp++;
						}
					}
					break;
			}
		}
	}
	
	//ORIGINAL LINE: #define max(a, b) ((a) > (b) ? (a) : (b))
	
	//ORIGINAL LINE: #define min(a, b) ((a) > (b) ? (b) : (a))
	
	//ORIGINAL LINE: #define abs(a) (((a) >= 0) ? (a) : -(a))
	
	//ORIGINAL LINE: #define ntohl(num) ((num << 24) | ((num & 0x0000FF00) << 8) | ((num & 0x00FF0000) >> 8) | (num >> 24))
	
	//ORIGINAL LINE: #define scr_point(x, y) (vm->mem->video + (y)*vm.mem->mr_state.sysinfo.screen_width + (x))
	
	//ORIGINAL LINE: #define mkrgb(r, g, b) (uint16)(((uint32)(r >> 3) << 11) + ((uint32)(g >> 2) << 5) + ((uint32)(b >> 3)))
	//懒得写，简化一下吧
	
	//ORIGINAL LINE: #define sw vm.mem->mr_state.sysinfo.screen_width
	
	//ORIGINAL LINE: #define sh vm.mem->mr_state.sysinfo.screen_height
	/*
	对于入口标志：
		该标志用于启动非dsm根目录的项目。
		启动dsm根目录时该参数填NULL（相当于运行"*A"固化应用）。
		若该参数以"*"开头，则执行固化应用。
			"*A"表示index为0的应用，
			"*B"表示index为1的应用，以此类推。
		若该参数以"%"开头，则执行根目录下的mrp文件，如"%QQ.mrp"执行QQ.mrp文件。
	*/
	/*
	读取mrp文件
	参数：
		vm			虚拟机
		filename	内部文件名
		len			读取到的长度
		lookfor		仅仅看看有没有文件
	返回：
		null		失败
		!null		文件内容，这个指针需要free
	*/
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: C# has no equivalent to methods returning pointers to value types:
//ORIGINAL LINE: byte *read_mrp_file(struct vm_info_st *vm, sbyte *filename, uint *len, bool lookfor);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//byte read_mrp_file(vm_info_st vm, ref string filename, ref uint len, bool lookfor);
	/*
	调用mr_event函数，用于向虚拟机发送事件
	*/
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int mr_event(vm_info_st vm, int code, int param0, int param1);
	/*
	通过入口参数来启动mrp
	参数：
		vm		虚拟机
		entry	入口标志
	返回：
		MR_SUCCESS	成功启动
		MR_FAILED	失败
	*/
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int mr_start_dsm(vm_info_st vm, ref string entry);
	/*
	直接启动mrp文件，并且可以传参过去
	参数：
		vm		虚拟机
		entry	入口标志
	返回：
		MR_SUCCESS	成功启动
		MR_FAILED	失败
	*/
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int mr_start_dsmB(vm_info_st vm, ref string entry);
	/*
	通过入口参数来启动虚拟机
	参数：
		vm		虚拟机
		entry	入口标志
	返回：
		MR_SUCCESS	成功启动
		MR_FAILED	失败
	*/
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int mr_start_dsmC(vm_info_st vm, ref string entry);
	/*
	通过入口参数来启动虚拟机
	参数：
		vm		虚拟机
		path	mrp文件路径
		entry	入口标志
	返回：
		MR_SUCCESS	成功启动
		MR_FAILED	失败
	*/
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int mr_start_dsm_ex(vm_info_st vm, ref string path, ref string entry);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int mr_testCom(vm_info_st vm, int L, int input0, int input1);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int mr_TestCom1(vm_info_st vm, int L, int input0, ref string input1, int len);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int mr_testComC(vm_info_st vm, int type, uint input, int len, int code);
	/*取得毫秒时间*/
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//uint mr_getTime(vm_info_st vm);
	/*震动多少毫秒*/
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int mr_startShake(vm_info_st vm, int ms);
	/*睡眠*/
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int mr_sleep(vm_info_st vm, uint ms);
	/*
	基本的平台调用接口
	参数：
		vm		虚拟机
		code	扩展接口事件
		param	事件参数
	*/
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int mr_plat(vm_info_st vm, int code, int param);
	// int32 mr_platEx(int32 code, uint8 *input, int32 input_len, uint8 **output, int32 *output_len, MR_PLAT_EX_CB *cb);
	/*
	扩展的平台调用接口
	参数：
		vm			虚拟机
		code		扩展接口事件
		input		输入参数的起始地址
		input_len	输入参数大小（字节数）
		output		输出参数的起始地址
		output_len	输出参数大小（字节数）
		cb			回调函数，由移植层返回给应用，如果应用成发现这个返回值为非空，那么需要在使用完返回数据后调用这个cb函数来释放移植层分配的资源
	*/
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int mr_platEx(vm_info_st vm, int code, uint input, int input_len, uint output, uint output_len, uint cb);
	
	//ORIGINAL LINE: #define vm_mem_offset(addr) ((uint8 *)(addr) - (uint8 *)(vm->cpu->mem->buffer))
	
	//ORIGINAL LINE: #define vm_mem_buf (vm->cpu->mem->buffer)
	
	//ORIGINAL LINE: #define vmreg(i) (vm->cpu->registers[i])
	
	//ORIGINAL LINE: #define vmstack(i) (*((uint32 *)(vm_mem_buf + vmreg(r_sp)) + i))
	
	//ORIGINAL LINE: #define MR_SPRITE_INDEX_MASK (0x03FF)
	
	//ORIGINAL LINE: #define MR_SPRITE_TRANSPARENT (0x0400)
	public static void swi_mr_c_function_new(vm_info_st vm)
	{
		//取得参数
		uint func = vm.cpu.registers[0]; //这时一个函数指针，类型:MR_C_FUNCTION
		uint len = vm.cpu.registers[1];
		
		Console.Write("mr_c_function_new(func=0x{0:x8}, len={1:D})", func, len);
        //如果有的话先释放它
        if ((vm.mem->mr_state).mr_c_function_P!=0 && (vm.mem->mr_state).mr_c_function_P_Len!=0)
		{
			mem_free(vm, (vm.mem->mr_state).mr_c_function_P, (vm.mem->mr_state).mr_c_function_P_Len);
			(vm.mem->mr_state).mr_c_function_P = (vm.mem->mr_state).mr_c_function_P_Len = 0;
		}
		//分配内存
		uint addr = (vm.mem->mr_state).mr_c_function_P = mem_malloc(vm, len);
		if (addr != 0)
		{
			memset(((vm.cpu.mem.bufferP) + (addr)), 0, len);
			
			(vm.mem->mr_state).mr_c_function_P_Len = len;
			(vm.mem->mr_state).mr_c_function = func;
		}
		else
		{
			(vm.mem->mr_state).mr_state = 5;
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		}
		//设置指针
		//(uint)((vm.cpu.mem.buffer) + ((vm.mem->mr_state).mr_c_function_load - 4)) = addr;
		
		uint* p = (uint*)(vm.cpu.mem.bufferP + ((vm.mem->mr_state).mr_c_function_load - 4));
	    * p= addr;
		
		vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS);
	}
	public static void swi_mr_testcom(vm_info_st vm)
	{
		/*
		原型： int mr_TestCom(mrp_State* L, int input0, int input1)
		*/
		uint st = (vm.cpu.registers[0]);
		uint input0 = (vm.cpu.registers[1]);
		uint input1 = (vm.cpu.registers[2]);
		
		Console.Write("mr_testcom(state=0x{0:x8}, input0={1:D}, input1={2:D})", st, input0, input1);
        //这个直接调用系统的就可以
        vm.cpu.registers[0] = (mr_testCom(vm, st, input0, input1));
	}
    static void swi_mr_testcom1(vm_info_st vm)
    {
        uint st = (vm.cpu.registers[0]);
        uint input0 = (vm.cpu.registers[1]);
        uint input1 = (vm.cpu.registers[2]);
        uint len = (vm.cpu.registers[3]);
        UnityEngine .Debug .LogWarning (string.Format ( "mr_testcom111(state=0x{0:x8}, input0={1:D}, input1={2:D},len={3:D})", st, input0, input1,len));
       
        vm.cpu.registers[0] = (mr_TestCom1(vm, st, input0, input1, len));
    }








































    //ORIGINAL LINE: #define logsysc(fmt, ...) printf("[SYSCAL] "); println(fmt, ##__VA_ARGS__)
































































    //ORIGINAL LINE: #define mr_ret(val) (vm->cpu->registers[0] = (val))

    //ORIGINAL LINE: #define vm.mem->mr_state (vm->mem->mr_state)

    //ORIGINAL LINE: #define vm_mem_offset(addr) ((uint8 *)(addr) - (uint8 *)(vm->cpu->mem->buffer))

    //ORIGINAL LINE: #define vm_mem_buf (vm->cpu->mem->buffer)

    //ORIGINAL LINE: #define vmreg(i) (vm->cpu->registers[i])

    //ORIGINAL LINE: #define vmstack(i) (*((uint32 *)(vm_mem_buf + vmreg(r_sp)) + i))

    //ORIGINAL LINE: #define MR_SPRITE_INDEX_MASK (0x03FF)

    //ORIGINAL LINE: #define MR_SPRITE_TRANSPARENT (0x0400)
#if _WIN32
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: #define macros defined in multiple preprocessor conditionals can only be replaced within the scope of the preprocessor conditional:
	
	//ORIGINAL LINE: #define _mkdir mkdir
#define _mkdir
#else
    //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: #define macros defined in multiple preprocessor conditionals can only be replaced within the scope of the preprocessor conditional:

    //ORIGINAL LINE: #define _mkdir(dirname) mkdir((dirname), 0777)
    //#define _mkdir
#endif
    public static void swi_mr_ferrno(vm_info_st vm)
	{
		//原型： (void) -> int32
		logi("mr_ferrno()");
		vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS); //不处理
	}
	public const int O_RDONLY = 0x0000; // open for reading only
	public const int O_WRONLY = 0x0001; // open for writing only
	public const int O_RDWR = 0x0002;// open for reading and writing
	public const int O_APPEND = 0x0008; // writes done at eof
	public const int O_CREAT   =    0x0100;// create and open file
	public const int F_OK = -1;
	public static void swi_mr_open(vm_info_st vm)
	{
		//原型： (const char *filename, uint32 mode) -> int32
		uint _filename = (vm.cpu.registers[0]);
		uint mode = (vm.cpu.registers[1]);
//ORIGINAL LINE: sbyte *filename = ((sbyte *)((vm->cpu->mem->buffer) + (_filename)));
		//sbyte filename = ((string)((vm.cpu.mem.buffer) + (_filename)));
		string filename = String(vm.cpu.mem.buffer,_filename);
		
		Console.Write("mr_open(filename={0}, mode={1:D})", filename + " index: " + _filename, mode);
        if (filename == ""|| _filename<16)
        {
            UnityEngine. Debug.LogWarning("No File: " + filename);
            vm.cpu.registers[0] = (0);
            return;
        }
        int new_mode = 0;
		if ((mode & DefineConstants.MR_FILE_RDONLY) != 0)
		{
			new_mode = O_RDONLY;
		}
		if ((mode & DefineConstants.MR_FILE_WRONLY) != 0)
		{
			new_mode = O_WRONLY;
		}
		if ((mode & DefineConstants.MR_FILE_RDWR) != 0)
		{
			new_mode = O_RDWR;
		}
		if ((mode & DefineConstants.MR_FILE_RECREATE) != 0)
		{
			new_mode = O_CREAT;
		}
		//sbyte[] fullpathname = new sbyte[DefineConstants.MAX_FILE_PATH_LEN];
		string fullpathname = "";
		get_filename(vm, ref fullpathname, ref filename);
		//如果文件存在 带此标志会导致错误
		if ((mode & DefineConstants.MR_FILE_CREATE)!=0 && (0 != access(fullpathname, F_OK)))
		{
			new_mode |= O_CREAT;
		}
        //返回值：成功则返回文件描述符，否则返回 -1
        //int f = open(fullpathname, new_mode, 0x1FF);
        //UnityEngine.Debug.LogWarning("open File: " + fullpathname+ "    mode:" + mode+ "   new_mode:" + new_mode);
        int f = open(fullpathname, new_mode, mode);
        if (f < 0)
		{
			Console.Write("[ERROR] ");
			Console.Write("mr_open failed with filename={0}", fullpathname);

            vm.cpu.registers[0] = (0);
            //vm.cpu.registers[0] = uint.MaxValue;
            return;
		}
		f += 5; //因为 linux 返回0也成功，mrp返回0为失败！所以统一加5
		vm.cpu.registers[0] = (uint)(f);
	}
    public static void swi_mr_close(vm_info_st vm)
	{
		//原型： (int32 f) -> int32
		uint f = (vm.cpu.registers[0]);
		
		Console.Write("mr_close(f={0:D})",f);
		
		if (f == 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		}
		int ret = close(f - 5);
		if (ret != 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		}
		vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS);
	}
	public static void swi_mr_info(vm_info_st vm)
	{
		//原型： (const char *filename) -> int32
//ORIGINAL LINE: sbyte *filename = ((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[0]))));
		//sbyte filename = ((string)((vm.cpu.mem.buffer) + ((vm.cpu.registers[0]))));
		string filename = String(vm.cpu.mem.buffer,vm.cpu.registers[0]);

        Console.Write("mr_info(filename={0})", filename);
		
		//sbyte[] fullpathname = new sbyte[DefineConstants.MAX_FILE_PATH_LEN];
		string fullpathname = "";
		stat s1 = new stat();
		int ret = Stat(get_filename(vm, ref fullpathname, ref filename), s1);
		if (ret != 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_IS_INVALID);
			return;
		}
		if (S_ISDIR(s1.st_mode))
		{
			vm.cpu.registers[0] = (DefineConstants.MR_IS_DIR);
		}
		else if (S_ISREG(s1.st_mode))
		{
			vm.cpu.registers[0] = (DefineConstants.MR_IS_FILE);
		}
		else
		{
			vm.cpu.registers[0] = (DefineConstants.MR_IS_INVALID);
		}
	}
    public static void swi_mr_write(vm_info_st vm)
	{
		//原型： (int32 f, void *p, uint32 l) -> int32
		int f = (int)(vm.cpu.registers[0]);
		uint _p = (vm.cpu.registers[1]);
		uint l = (vm.cpu.registers[2]);
		
		Console.Write("mr_write(f={0:D}, p=0x{1:x8}, l={2:D})",f,_p,l);
		
		//object p = ((object)((vm.cpu.mem.buffer) + (_p)));
		//void* p = ((void*)((vm.cpu.mem.bufferP) + (_p)));
		if (f < 5)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		}
		//vm.cpu.registers[0] = (write(f - 5, p, l));
        
		vm.cpu.registers[0] = (write(f - 5, _p, l));
	}
    public static void swi_mr_read(vm_info_st vm)
	{
		//原型： (int32 f, void *p, uint32 l) -> int32
		int f = (int)(vm.cpu.registers[0]);
		uint _p = (vm.cpu.registers[1]);
		uint l = (vm.cpu.registers[2]);
		
		Console.Write("mr_read(f={0:D}, p=0x{1:x8}, l={2:D})", f, _p, l);
        void* p = vmpt_real(_p);
        if (f < 5)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		}
        
        vm.cpu.registers[0] = (read(f - 5, p, l));
	}
	public static void swi_mr_seek(vm_info_st vm)
	{
		//原型： (int32 f, int32 pos, int method) -> int32
		int f = (int)(vm.cpu.registers[0]);
		int pos = (int)(vm.cpu.registers[1]);
		int method = (int)(vm.cpu.registers[2]);
		
		Console.Write("mr_seek(f={0:D}, pos={1:D}, method={2:D})", f, pos, method);
        if (f < 5)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		}
		int ret = lseek(f - 5, pos, method);
		vm.cpu.registers[0] = (uint)((ret < 0) ? DefineConstants.MR_FAILED : DefineConstants.MR_SUCCESS);
	}
	public static void swi_mr_getLen(vm_info_st vm)
	{
		//原型： (const char *filename) -> int32
		uint _filename = (vm.cpu.registers[0]);
//ORIGINAL LINE: sbyte *filename = ((sbyte *)((vm->cpu->mem->buffer) + (_filename)));
		//sbyte filename = ((string)((vm.cpu.mem.buffer) + (_filename)));
		string filename = String(vm.cpu.mem.buffer,_filename);
		
		Console.Write("mr_getLen(filename={0})", filename);
		
		//sbyte[] fullpathname = new sbyte[DefineConstants.MAX_FILE_PATH_LEN];
		string fullpathname = null;
		stat s1 = new stat();
		int ret = Stat(get_filename(vm, ref fullpathname, ref filename), s1);
		if (ret != 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
            UnityEngine.Debug.LogWarning("getLen error " + fullpathname );

            return;
		}
		vm.cpu.registers[0] = (uint)(s1.st_size);
	}
	public static void swi_mr_remove(vm_info_st vm)
	{
		//原型： (const char *filename) -> int32
		uint _filename = (vm.cpu.registers[0]);
//ORIGINAL LINE: sbyte *filename = ((sbyte *)((vm->cpu->mem->buffer) + (_filename)));
		//sbyte filename = ((string)((vm.cpu.mem.buffer) + (_filename)));
		string filename = String(vm.cpu.mem.buffer, _filename);
		
		Console.Write("mr_remove(filename={0})", filename);
		
		//sbyte[] fullpathname = new sbyte[DefineConstants.MAX_FILE_PATH_LEN];
		string fullpathname = null;
		int ret;
		ret = remove(get_filename(vm, ref fullpathname, ref filename));
		//if (ret != 0 && errno != 2)
		if (ret != 0 )
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		}
		vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS);
	}
	public static void swi_mr_rename(vm_info_st vm)
	{
		//原型： (const char *oldname, const char *newname) -> int32
//ORIGINAL LINE: sbyte *oldname = ((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[0]))));
		//sbyte oldname = ((string)((vm.cpu.mem.buffer) + ((vm.cpu.registers[0]))));
		string oldname = (String(vm.cpu.mem.buffer,vm.cpu.registers[0]));
		
		//ORIGINAL LINE: sbyte *newname = ((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[1]))));
		//sbyte newname = ((string)((vm.cpu.mem.buffer) + ((vm.cpu.registers[1]))));
		string  newname = (String(vm.cpu.mem.buffer,vm.cpu.registers[1]));
		
		Console.Write("mr_rename(oldname={0}, newname={1})", oldname, newname);
        //sbyte[] fullpathname_1 = new sbyte[DefineConstants.MAX_FILE_PATH_LEN];
        //sbyte[] fullpathname_2 = new sbyte[DefineConstants.MAX_FILE_PATH_LEN];
        string fullpathname_1 =null;
		string fullpathname_2 = null;
		get_filename(vm, ref fullpathname_1, ref oldname);
		get_filename(vm, ref fullpathname_2, ref newname);
		int ret = rename(fullpathname_1, fullpathname_2);
		vm.cpu.registers[0] = ((ret == 0) ? DefineConstants.MR_SUCCESS : DefineConstants.MR_FAILED);
	}
    public static void swi_mr_mkDir(vm_info_st vm)
	{
		//原型： (const char *dirname) -> int32
//ORIGINAL LINE: sbyte *dirname = ((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[0]))));
		//sbyte dirname = ((string)((vm.cpu.mem.buffer) + ((vm.cpu.registers[0]))));
		string dirname = String(vm.cpu.mem.buffer,vm.cpu.registers[0]);
		
		Console.Write("mr_mkDir(dirname={0})", dirname);
		
		//sbyte[] fullpathname = new sbyte[DefineConstants.MAX_FILE_PATH_LEN];
		String fullpathname = null;
		get_filename(vm, ref fullpathname, ref dirname);
		//检测是否已存在
		if (accessDir(fullpathname, F_OK) == 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS);
			return;
		}
		int ret = mkdir(fullpathname);
		vm.cpu.registers[0] = ((ret == 0) ? DefineConstants.MR_SUCCESS : DefineConstants.MR_FAILED);
	}
    public unsafe static void swi_mr_rmDir(vm_info_st vm)
	{
		//原型： (const char *dirname) -> int32
//ORIGINAL LINE: sbyte *dirname = ((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[0]))));
		//sbyte dirname = ((string)((vm.cpu.mem.buffer) + ((vm.cpu.registers[0]))));
		string dirname = (String(vm.cpu.mem.buffer,vm.cpu.registers[0]));
		
		Console.Write("mr_rmDir(dirname={0})", dirname);
		
		//sbyte[] fullpathname = new sbyte[DefineConstants.MAX_FILE_PATH_LEN];
		string fullpathname = "";
		string fullpathname2 = "";
		get_filename(vm, ref fullpathname, ref dirname);
		//fixed (sbyte* d = vm.mem->mr_state.sysinfo.sdcard_dir)
	    sbyte* d = vm.mem->mr_state.sysinfo.sdcard_dir;
		{
			if (strcasecmp(fullpathname, String(d)) == 0)
			{
				vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
				return;
			}
			//fixed (sbyte* di = vm.mem->mr_state.sysinfo.dsm_dir)
			sbyte* di = vm.mem->mr_state.sysinfo.dsm_dir;
				fullpathname2 = string.Format("{0}{1}", String(d), String(di));
			if (strcasecmp(fullpathname, fullpathname2) == 0)
			{
				vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
				return;
			}
		}
		int ret = rmdir(fullpathname);
		vm.cpu.registers[0] = ((ret == 0) ? DefineConstants.MR_SUCCESS : DefineConstants.MR_FAILED);
	}
    public static void swi_mr_findStart(vm_info_st vm)
	{
		//原型： (const char *dirname, char *buffer, uint32 len) -> int32
//ORIGINAL LINE: sbyte *dirname = ((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[0]))));
		//sbyte dirname = ((string)((vm.cpu.mem.buffer) + ((vm.cpu.registers[0]))));
		string dirname = (String(vm.cpu.mem.buffer,vm.cpu.registers[0]));
        if(dirname=="")
        {
            vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
            return;
        }
		uint _buffer = vm.cpu.registers[1];
//ORIGINAL LINE: sbyte *buffer = ((sbyte *)((vm->cpu->mem->buffer) + (_buffer)));
		//sbyte buffer = ((string)((vm.cpu.mem.buffer) + (_buffer)));
		sbyte* buffer = (sbyte*)(vm.cpu.mem.bufferP + _buffer);
		if (GameStart.isPrint)
        {
			string bufferin = (String(buffer));
			print(bufferin);
		}
			
        uint len = (vm.cpu.registers[2]);
		
		Console.Write("mr_findStart(dirname={0}, buffer=0x{1:x8}, len={2:D})", dirname, _buffer,len);
		
		if (dirname == null || buffer == null || len == 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		}
		DIR pDir;
		dirent pDt;
		//sbyte[] fullpathname = new sbyte[DefineConstants.MAX_FILE_PATH_LEN];
		string fullpathname = "";
		memset(buffer, 0, len);
		if ((pDir = opendir(get_filename(vm, ref fullpathname, ref dirname))) != null)
		{
			if ((pDt = readdir(pDir)) != null)
			{
				UTF8ToGBString(pDt.d_name, (byte*)buffer,(int) len);
			}
			vm.cpu.registers[0] = (uint)pDir.handle;
			return;
		}
		vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
	}
    public static void swi_mr_findGetNext(vm_info_st vm)
	{
		//原型： (int32 search_handle, char *buffer, uint32 len) -> int32
		uint handle = (vm.cpu.registers[0]);
        if (handle ==0)
        {
            //vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
            //return;
        }
        uint _buffer = (vm.cpu.registers[1]);
//ORIGINAL LINE: sbyte *buffer = ((sbyte *)((vm->cpu->mem->buffer) + (_buffer)));
		sbyte* buffer = (sbyte *)(vm.cpu.mem.bufferP+_buffer);
		if (GameStart.isPrint)
			print(String(buffer));
		uint len = (vm.cpu.registers[2]);
		
		Console.Write("mr_findGetNext(handle={0:D}, buffer=0x{1:x8}, len={2:D})", handle, _buffer,len);
		
		if (handle == 0  || _buffer == 0 || len == 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		}
		//DIR pDir = (DIR)handle;
		DIR pDir = DIR.Get( handle);
		dirent pDt;
		memset(buffer, 0, len);
		pDt = readdir(pDir);
		if ((pDt) != null)
		{
			UTF8ToGBString(pDt.d_name,  (byte*)buffer,(int) len);
			vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS);
			return;
		}
		vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
	}
    public static void swi_mr_findStop(vm_info_st vm)
	{
		//原型： (int32 search_handle) -> int32
		uint handle = (vm.cpu.registers[0]);
		
		Console.Write("mr_findStop(handle={0:D})",__VA_ARGS__);
		
		if (handle == 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		}
		//DIR pDir = (DIR)handle;
		DIR pDir =  DIR.Get(handle);
		vm.cpu.registers[0] = (closedir(pDir));
	}
	public static void swi_mr_readFile(vm_info_st vm)
	{
		//原型： (const char *filename, int32 *filelen, int32 lookfor) -> void*
//ORIGINAL LINE: sbyte *filename = ((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[0]))));
		//sbyte filename = ((string)((vm.cpu.mem.buffer) + ((vm.cpu.registers[0]))));
		string  filename = String(vm.cpu.mem.buffer,vm.cpu.registers[0]);
		uint _filelen = (vm.cpu.registers[1]);
		uint lookfor = (vm.cpu.registers[2]);
//ORIGINAL LINE: uint *filelen = ((uint *)((vm->cpu->mem->buffer) + (_filelen)));
		uint filelen =* (uint*)(((vm.cpu.mem.bufferP) + (_filelen)));
		
		Console.Write("mr_readFile(filename={0}, filelen=0x{1:x8}, lookfor={2:D})", filename, filelen, lookfor);
        //ORIGINAL LINE: byte *buf = read_mrp_file(vm, filename, filelen, lookfor);
        byte[] buf = read_mrp_file(vm, ref filename, ref filelen, lookfor);
		//空处理
		if (buf == null)
		{
			vm.cpu.registers[0] = (0);
		}
		//如果只是为了看看是否存在，则直接返回了
		else if (lookfor!=0)
		{
			vm.cpu.registers[0] = (1);
		}
		//否则需要拷贝一下内存
		else
		{
            uint addr = mem_malloc(vm, filelen);
			Console.Write("addr: " + addr);

			memcpy(vm.cpu.mem.buffer,addr, buf,0, filelen);
       
            //memcpy(vm.cpu.mem.buffer, 861576, buf, 0, filelen);

            free(buf);
			vm.cpu.registers[0] = (addr);
		}
	}

    public static byte[] MenuItem;

	public static void swi_mr_menuCreate(vm_info_st vm)
	{
        //原型： (const char* title, int16 num) -> int32
        //ORIGINAL LINE: sbyte *title = parse_text(((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[0])))));
        int index = (int)vm.cpu.registers[0];
        if (index< 16)
        {
            vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
            return;
        }

        sbyte* title = parse_text( ((sbyte*)((vm.cpu.mem.bufferP) + ((vm.cpu.registers[0])))));

		short num = (short)(vm.cpu.registers[1]);
		
		Console.Write("mr_menuCreate(title={0}, num={1:D})",String( title),num);
		
		//创建菜单
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'mr_menu_t' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		uint _menu = mem_malloc(vm,(uint) sizeof(mr_menu_st));
		if (_menu <= 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		};
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'mr_menu_t' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		//mr_menu_t menu = ((mr_menu_t)((vm.cpu.mem.buffer) + (_menu)));
		mr_menu_st* menu = ((mr_menu_st*)((vm.cpu.mem.bufferP) + (_menu)));
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'mr_menu_t' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		
		memset(menu, 0, (uint)sizeof(mr_menu_st));
        //分配菜单项
        //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
        //menu->items = (sbyte**)malloc((sizeof(sbyte*) * num));
        MenuItem = new byte[sizeof(sbyte*) * num];

        //menu->items = (sbyte**)malloc((sizeof(uint) * num));
        menu->items = (sbyte**)getBytePtr(MenuItem);
        if (menu->items == null)
		{
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'mr_menu_t' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
			mem_free(vm, _menu, (uint)sizeof(mr_menu_st));
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		}
		//memset(menu->items, 0, sizeof(sbyte *) * num);
		//赋值
		menu->title = title;
		menu->item_num = (uint)num;
		menu->current = 0;
		//返回
		vm.cpu.registers[0] = (_menu);
	}
	public static void swi_mr_menuSetItem(vm_info_st vm)
	{
		//原型： (int32 menu, const char *text, int32 index) -> int32
		uint _menu = (vm.cpu.registers[0]);
        if ((int)_menu < 16)
        {
            vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
            return;
        }
        //ORIGINAL LINE: sbyte *text = parse_text(((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[1])))));
        sbyte* text = parse_text( ((sbyte*)((vm.cpu.mem.bufferP) + ((vm.cpu.registers[1])))));
		uint index = (vm.cpu.registers[2]);
		
		Console.Write("mr_menuSetItem(menu={0:D}, text={1}, item={2:D})", _menu,String(text),index);
		
		if (_menu <= 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		};
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'mr_menu_t' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		mr_menu_st* menu = ((mr_menu_st*)((vm.cpu.mem.bufferP) + (_menu)));
		if (index >= menu->item_num)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		}
        //if ((*(menu->items[index]))!='0')
        //{
        //	free(menu->items[index]);
        //}
        //menu->items[index] = text;
        UnityEngine.Debug.Log("menu: "+ String(text));
		vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS);
	}
	public static void swi_mr_menuShow(vm_info_st vm)
	{
		//原型： (int32 menu) -> int32
		uint _menu = (vm.cpu.registers[0]);
        if ((int)_menu < 16)
        {
            vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
            return;
        }
        Console.Write("mr_menuShow(menu={0:D})", _menu);
		
		if (_menu <= 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		};
		if (vm.callbacks.onMenu!=null)
		{
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'mr_menu_t' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
			vm.callbacks.onMenu(vm, 1, ((mr_menu_st*)((vm.cpu.mem.bufferP) + (_menu))));
		}
		vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS);
	}
	public static void swi_mr_menuSetFocus(vm_info_st vm)
	{
		//原型： (int32 menu, int32 index) -> int32
		uint _menu = (vm.cpu.registers[0]);
        if ((int)_menu < 16)
        {
            vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
            return;
        }
        uint index = (vm.cpu.registers[1]);
		
		Console.Write("mr_menuSetFocus(menu={0:D}, item={1:D})", _menu);
		
		if (_menu <= 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		};
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'mr_menu_t' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		mr_menu_st* menu = ((mr_menu_st*)((vm.cpu.mem.bufferP) + (_menu)));
		if (index >= menu->item_num)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		}
		menu->current = index;
		vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS);
	}
	public static void swi_mr_menuRelease(vm_info_st vm)
	{
		//原型： (int32 menu) -> int32
		uint _menu = (vm.cpu.registers[0]);
        if ((int)_menu < 16)
        {
            vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
            return;
        }
        Console.Write("mr_menuRelease(menu={0:D})", _menu);
		
		if (_menu <= 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		};
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'mr_menu_t' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		//mr_menu_t menu = ((mr_menu_t)((vm.cpu.mem.buffer) + (_menu)));
		mr_menu_st* menu = ((mr_menu_st*)((vm.cpu.mem.bufferP) + (_menu)));
		if (vm.callbacks.onMenu!=null)
		{
			vm.callbacks.onMenu(vm, 0,menu);
		}
		free(menu->title);
		for (uint i = 0; i < menu->item_num; i++)
		{
			if (*menu->items[i]!='0')
			{
				free(menu->items[i]);
			}
		}
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'mr_menu_t' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		mem_free(vm, _menu,(uint) sizeof(mr_menu_st));
		vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS);
	}
	public static void swi_mr_menuRefresh(vm_info_st vm)
	{
		//原型： (int32 menu) -> int32
		uint _menu = (vm.cpu.registers[0]);
        if ((int)_menu < 16)
        {
            vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
            return;
        }
        Console.Write("mr_menuRefresh(menu={0:D})", _menu);
		
		if (_menu <= 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		};
		if (vm.callbacks.onMenu!=null)
		{
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'mr_menu_t' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
			vm.callbacks.onMenu(vm, 2, ((mr_menu_st*)((vm.cpu.mem.bufferP) + (_menu))));
		}
		vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS);
	}
	public static void swi_mr_dialogCreate(vm_info_st vm)
	{
        //原型： (const char * title, const char * text, int32 type) -> int32
        //ORIGINAL LINE: sbyte *title = parse_text(((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[0])))));
        uint _dialogIndex = vm.cpu.registers[0];
        if ((int)_dialogIndex < 16)
        {
            vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
            return;
        }
        sbyte* title = parse_text(((sbyte*)((vm.cpu.mem.bufferP) + _dialogIndex)));
		//ORIGINAL LINE: sbyte *text = parse_text(((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[1])))));
		sbyte* text = parse_text( ((sbyte*)((vm.cpu.mem.bufferP) + ((vm.cpu.registers[1])))));
		uint type = (vm.cpu.registers[2]);
		
		Console.Write("mr_dialogCreate(title={0}, text={1}, type={2:D})",__VA_ARGS__);
		
	
		uint _dialog = mem_malloc(vm, sizeof(mr_dialog_st));
		if (_dialog <= 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		};
		if (vm.callbacks.onDialog != null)
		{
	
			mr_dialog_st* dialog = ((mr_dialog_st*)((vm.cpu.mem.bufferP) + (_dialog)));
			dialog->title = title;
			dialog->text = text;
			dialog->type = type;
			vm.callbacks.onDialog(vm, 1, dialog);
		}
		vm.cpu.registers[0] = (_dialog);
	}
	public static void swi_mr_dialogRelease(vm_info_st vm)
	{
		//原型： (int32 dialog) -> int32
		uint _dialog = (vm.cpu.registers[0]);
        if ((int)_dialog < 16)
        {
            vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
            return;
        }
        Console.Write("mr_dialogRelease(dialog={0:D})",__VA_ARGS__);
		
		if (_dialog <= 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		};
	
		mr_dialog_st* dialog = ((mr_dialog_st*)((vm.cpu.mem.bufferP) + (_dialog)));
		if (vm.callbacks.onDialog!=null)
		{
			vm.callbacks.onDialog(vm, 0, dialog);
		}
		if (dialog->title != null)
		{
			free(dialog->title);
		}
		if (dialog->text != null)
		{
			free(dialog->text);
		}
	
		mem_free(vm, _dialog,(uint) sizeof(mr_dialog_st));
		vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS);
	}
	public static void swi_mr_dialogRefresh(vm_info_st vm)
	{
		//原型： (int32 dialog, const char * title, const char * text, int32 type) -> int32
		uint _dialog = (vm.cpu.registers[0]);
        if ((int)_dialog < 16)
        {
            vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
            return;
        }
        //ORIGINAL LINE: sbyte *title = parse_text(((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[1])))));
        sbyte* title = parse_text( ((sbyte*)((vm.cpu.mem.bufferP) + ((vm.cpu.registers[1])))));
		//ORIGINAL LINE: sbyte *text = parse_text(((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[2])))));
		sbyte* text = parse_text( ((sbyte*)((vm.cpu.mem.bufferP) + ((vm.cpu.registers[2])))));
		uint type = (vm.cpu.registers[3]);
		
		Console.Write("mr_dialogRefresh(dialog={0:D}, title={1}, text={2}, type={3:D})",__VA_ARGS__);
		
		if (_dialog <= 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		};
		if (vm.callbacks.onDialog != null)
		{
	
			mr_dialog_st* dialog =((mr_dialog_st*)((vm.cpu.mem.bufferP) + (_dialog)));
			if (dialog->title != null)
			{
				free(dialog->title);
			}
			dialog->title = title;
			if (dialog->text != null)
			{
				free(dialog->text);
			}
			dialog->text = text;
			dialog->type = type;
			vm.callbacks.onDialog(vm, 2, dialog);
		}
		vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS);
	}
	public static void swi_mr_textCreate(vm_info_st vm)
	{
        //原型： (const char * title, const char * text, int32 type) -> int32
        //ORIGINAL LINE: sbyte *title = parse_text(((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[0])))));
        uint index = (vm.cpu.registers[0]);
        if ((int)index < 16)
        {
            vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
            return;
        }
        sbyte* title = parse_text( ((sbyte*)((vm.cpu.mem.bufferP) + ((vm.cpu.registers[0])))));
		//ORIGINAL LINE: sbyte *text = parse_text(((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[1])))));
		sbyte* text = parse_text( ((sbyte*)((vm.cpu.mem.bufferP) + ((vm.cpu.registers[1])))));
		uint type = (vm.cpu.registers[2]);
		
		Console.Write("mr_textCreate(title={0}, text={1}, type={2:D})",__VA_ARGS__);
		
	
		uint _textbox = mem_malloc(vm, sizeof(mr_textbox_st));
		if (_textbox <= 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		};
		if (vm.callbacks.onTextBox != null)
		{
	
			mr_textbox_st* textbox = ((mr_textbox_st*)((vm.cpu.mem.bufferP) + (_textbox)));
			textbox->title = title;
			textbox->text = text;
			textbox->type = (int)type;
			vm.callbacks.onTextBox(vm, 1, textbox);
		}
		vm.cpu.registers[0] = (_textbox);
	}
	public static void swi_mr_textRelease(vm_info_st vm)
	{
		//原型： (int32 handle) -> int32
		uint _textbox = (vm.cpu.registers[0]);
        uint index = (vm.cpu.registers[0]);
        if ((int)index < 16)
        {
            vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
            return;
        }
        Console.Write("mr_textRelease(handle={0:D})",__VA_ARGS__);
		
		if (_textbox <= 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		};
	
		mr_textbox_st* textbox = ((mr_textbox_st*)((vm.cpu.mem.bufferP) + (_textbox)));
		if (vm.callbacks.onTextBox!=null)
		{
			vm.callbacks.onTextBox(vm, 0, textbox);
		}
		if (textbox->title != null)
		{
			free(textbox->title);
		}
		if (textbox->text != null)
		{
			free(textbox->text);
		}
	
		//mem_free(vm, _textbox, sizeof(mr_textbox_t));
		mem_free(vm, _textbox, (uint)sizeof(mr_textbox_st));
		vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS);
	}
	public static void swi_mr_textRefresh(vm_info_st vm)
	{
		//原型： (int32 handle, const char * title, const char * text) -> int32
		uint _textbox = (vm.cpu.registers[0]);
        uint index = (vm.cpu.registers[0]);
        if ((int)index < 16)
        {
            vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
            return;
        }
        //ORIGINAL LINE: sbyte *title = parse_text(((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[1])))));
        sbyte* title = parse_text( ((sbyte*)((vm.cpu.mem.bufferP) + ((vm.cpu.registers[1])))));
		//ORIGINAL LINE: sbyte *text = parse_text(((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[2])))));
		sbyte* text = parse_text( ((sbyte*)((vm.cpu.mem.bufferP) + ((vm.cpu.registers[2])))));
		
		Console.Write("mr_textRefresh(handle={0:D}, title={1}, text={2})",__VA_ARGS__);
		
		if (_textbox <= 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		};
		if (vm.callbacks.onTextBox != null)
		{
	
			mr_textbox_st* textbox = ((mr_textbox_st*)((vm.cpu.mem.bufferP) + (_textbox)));
			if (textbox->title != null)
			{
				free(textbox->title);
			}
			textbox->title = title;
			if (textbox->text != null)
			{
				free(textbox->text);
			}
			textbox->text = text;
			vm.callbacks.onTextBox(vm, 2, textbox);
		}
		vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS);
	}
	public static void swi_mr_editCreate(vm_info_st vm)
	{
        //原型： (const char * title, const char * text, int32 type, int32 max_size) -> int32
        //ORIGINAL LINE: sbyte *title = parse_text(((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[0])))));
        uint index = (vm.cpu.registers[0]);
        if ((int)index < 16)
        {
            vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
            return;
        }
        sbyte* title = parse_text( ((sbyte*)((vm.cpu.mem.bufferP) + ((vm.cpu.registers[0])))));
		//ORIGINAL LINE: sbyte *text = parse_text(((sbyte *)((vm->cpu->mem->buffer) + ((vm->cpu->registers[1])))));
		sbyte* text = parse_text( ((sbyte*)((vm.cpu.mem.bufferP) + ((vm.cpu.registers[1])))));
		uint type = (vm.cpu.registers[2]);
		uint max_size = (vm.cpu.registers[3]);
		
		Console.Write("mr_editCreate(title={0}, text={1}, type={2:D}, max_size={3:D})",__VA_ARGS__);
		
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'mr_textedit_t' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		uint _edit = mem_malloc(vm, sizeof(mr_textedit_st));
		if (_edit <= 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		};
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'mr_textedit_t' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		mr_textedit_st* edit = ((mr_textedit_st*)((vm.cpu.mem.bufferP) + (_edit)));
		edit->buffer_len = edit->buffer = 0u;
		if (vm.callbacks.onTextEdit != null)
		{
			edit->title = title;
			edit->text = text;
			edit->type = type;
			edit->max_size = max_size;
			vm.callbacks.onTextEdit(vm, 1, edit);
		}
		vm.cpu.registers[0] = (_edit);
	}
	public static void swi_mr_editRelease(vm_info_st vm)
	{
		//原型： (int32 edit) -> int32
		uint _edit = (vm.cpu.registers[0]);
        uint index = (vm.cpu.registers[0]);
        if ((int)index < 16)
        {
            vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
            return;
        }
        Console.Write("mr_editRelease(edit={0:D})",__VA_ARGS__);
		
		if (_edit <= 0)
		{
			vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
			return;
		};
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'mr_textedit_t' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		mr_textedit_st* edit = ((mr_textedit_st*)((vm.cpu.mem.bufferP) + (_edit)));
		if (vm.callbacks.onTextEdit!=null)
		{
			vm.callbacks.onTextEdit(vm, 0, edit);
		}
		if (edit->title != null)
		{
			free(edit->title);
		}
		if (edit->text != null)
		{
			free(edit->text);
		}
		if (edit->buffer_len!=0)
		{
			mem_free(vm, edit->buffer, edit->buffer_len);
			edit->buffer_len = edit->buffer = 0;
		}
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'mr_textedit_t' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		mem_free(vm, _edit, (uint)sizeof(mr_textedit_st));
		vm.cpu.registers[0] = (DefineConstants.MR_SUCCESS);
	}
	public static void swi_mr_editGetText(vm_info_st vm)
	{
		//原型： (int32 edit) -> const char *
		uint _edit = (vm.cpu.registers[0]);
        uint index = (vm.cpu.registers[0]);
        if ((int)index < 16)
        {
            vm.cpu.registers[0] = (DefineConstants.MR_FAILED);
            return;
        }
        Console.Write("mr_editGetText(edit={0:D})",__VA_ARGS__);
		
		if (_edit <= 0 || (vm.callbacks.onEditGetText == null))
		{
			vm.cpu.registers[0] = (0); //返回空
			return;
		}
		//获取文本
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'mr_textedit_t' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		mr_textedit_st* edit = ((mr_textedit_st*)((vm.cpu.mem.bufferP) + (_edit)));
//ORIGINAL LINE: sbyte *text = vm->callbacks.onEditGetText(vm, edit);
		sbyte * text = vm.callbacks.onEditGetText(vm, edit);
		if (null == text)
		{
			vm.cpu.registers[0] = (0);
			return;
		}
		//缓冲区初始化
		if (edit->buffer_len > 0)
		{
			mem_free(vm, edit->buffer, edit->buffer_len);
		}
		edit->buffer_len = UCS2_strlen(text) + 2;
		edit->buffer = mem_malloc(vm, edit->buffer_len);
		//拷贝到缓冲
		memcpy(vm.cpu.mem.buffer,edit->buffer, text, edit->buffer_len);
		//返回结果
		vm.cpu.registers[0] = (edit->buffer);
	}
	public static void swi_mr_winCreate(vm_info_st vm)
	{
		//原型： (void) -> int32
		logsysc("mr_winCreate()");
		vm.cpu.registers[0] = (DefineConstants.MR_IGNORE);
	}
	public static void swi_mr_winRelease(vm_info_st vm)
	{
		//原型： (int32 win) -> int32
		uint win = (vm.cpu.registers[0]);
		
		Console.Write("mr_winRelease(win={0:D})",__VA_ARGS__);
		
		vm.cpu.registers[0] = (DefineConstants.MR_IGNORE);
	}

	//ORIGINAL LINE: #define check_handle(handle) if (handle <= 0) { mr_ret(MR_FAILED); return; }
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: Access declarations are not available in C#:
	//;
	public static sbyte* parse_text(sbyte* text)
	{
		//uint len = UCS2_text.Length;
		uint len = UCS2_strlen(text);

		//ORIGINAL LINE: sbyte *buf = malloc(len + 2);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
		sbyte* buf = (sbyte*)malloc((int)len + 2); //注意，对于Unicode字符串，需要+2
												   //
		memcpy(buf, text, len);
		string s = UCS2ByteRev(buf);
		UCS2ToGBString((ushort*)buf, buf, len);
		return buf;
		//string a = "";
		//for(int i=0;i<len;i++)
		//      {
		//	a += text[i];
		//      }
		//UCS2ByteRev(text);
		//UtoGB(a);
		//return a;
	}
	
	//ORIGINAL LINE: #define logsysc(fmt, ...) printf("[SYSCAL] "); println(fmt, ##__VA_ARGS__)
	
	//ORIGINAL LINE: #define mr_ret(val) (vm->cpu->registers[0] = (val))
	
	//ORIGINAL LINE: #define vm.mem->mr_state (vm->mem->mr_state)
	
	//ORIGINAL LINE: #define vm_mem_offset(addr) ((uint8 *)(addr) - (uint8 *)(vm->cpu->mem->buffer))
	
	//ORIGINAL LINE: #define vm_mem_buf (vm->cpu->mem->buffer)
	
	//ORIGINAL LINE: #define vmreg(i) (vm->cpu->registers[i])
	
	//ORIGINAL LINE: #define vmstack(i) (*((uint32 *)(vm_mem_buf + vmreg(r_sp)) + i))
	
	//ORIGINAL LINE: #define MR_SPRITE_INDEX_MASK (0x03FF)
	
	//ORIGINAL LINE: #define MR_SPRITE_TRANSPARENT (0x0400)
	
	//ORIGINAL LINE: #define max(a, b) ((a) > (b) ? (a) : (b))
	
	//ORIGINAL LINE: #define min(a, b) ((a) > (b) ? (b) : (a))
	
	//ORIGINAL LINE: #define abs(a) (((a) >= 0) ? (a) : -(a))
	
	//ORIGINAL LINE: #define ntohl(num) ((num << 24) | ((num & 0x0000FF00) << 8) | ((num & 0x00FF0000) >> 8) | (num >> 24))
	public static void swi_mr_malloc(vm_info_st vm)
	{
		//函数原型： (uint32 len) -> void*
		//取参数
		uint len = (vm.cpu.registers[0]);
		
		println("mr_malloc(len=%d)",__VA_ARGS__);
		//分配内存
		uint addr = mem_malloc(vm, len);
		//返回内存地址
		vm.cpu.registers[0] = (addr);
	}
	public static void swi_mr_free(vm_info_st vm)
	{
		//函数原型： (void* p, uint32 len) -> void
		//取参数
		uint p = (vm.cpu.registers[0]);
		uint len = (vm.cpu.registers[1]);
		
		println("mr_free(p=0x%08x, len=%d)",p, len);
		mem_free(vm, p, len);
	}
	public static void swi_mr_realloc(vm_info_st vm)
	{
		//函数原型： (void* p, uint32 oldlen, uint32 len) -> void*
		//取参数
		uint p = (vm.cpu.registers[0]);
		uint oldlen = (vm.cpu.registers[1]);
		uint len = (vm.cpu.registers[2]);
		
		println("mr_realloc(p=0x%08x, oldlen=%d, len=%d)",__VA_ARGS__);
		uint minsize = (oldlen > len) ? len : oldlen;
		//如果没有分配过则直接分配
		if (p == 0)
		{
			vm.cpu.registers[0] = (mem_malloc(vm, len));
			return;
		}
		//如果新的长度为0，则直接释放
		if (len == 0)
		{
			mem_free(vm, p, oldlen);
			vm.cpu.registers[0] = (0); //返回空
			return;
		}
		//否则重新分配
		uint addr = mem_malloc(vm, len);
		if (addr == 0)
		{
			vm.cpu.registers[0] = (0);
			return;
		}
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'memmove' has no equivalent in C#:
		//memmove(vmpt_real(void, addr), vmpt_real(void, p), ((oldlen) > (len) ? (len) : (oldlen))); //拷贝内存
		memmove(vm.cpu.mem.buffer,addr, vm.cpu.mem.buffer,p, minsize); //拷贝内存
		mem_free(vm, p, oldlen); //释放旧的内存
		//返回
		vm.cpu.registers[0] = (addr);
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	//ORIGINAL LINE: #define logsysc(fmt, ...) printf("[SYSCAL] "); println(fmt, ##__VA_ARGS__)
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	//ORIGINAL LINE: #define mr_ret(val) (vm->cpu->registers[0] = (val))
	
	//ORIGINAL LINE: #define vm.mem->mr_state (vm->mem->mr_state)
	
	//ORIGINAL LINE: #define vm_mem_offset(addr) ((uint8 *)(addr) - (uint8 *)(vm->cpu->mem->buffer))
	
	//ORIGINAL LINE: #define vm_mem_buf (vm->cpu->mem->buffer)
	
	//ORIGINAL LINE: #define vmreg(i) (vm->cpu->registers[i])
	
	//ORIGINAL LINE: #define vmstack(i) (*((uint32 *)(vm_mem_buf + vmreg(r_sp)) + i))
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: C# has no equivalent to methods returning pointers to value types:
//ORIGINAL LINE: ushort *mr_c2u(sbyte *cp, int *err, int *size);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//ushort mr_c2u(ref string cp, ref int err, ref int size);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//string get_filename(vm_info_st vm, ref string outputbuf, ref string filename);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//FILE open_file(vm_info_st vm, ref string filename, string mode);
	
	//ORIGINAL LINE: #define MR_SPRITE_INDEX_MASK (0x03FF)
	
	//ORIGINAL LINE: #define MR_SPRITE_TRANSPARENT (0x0400)
	public static void swi_mr_div(vm_info_st vm)
	{
		//原型： (int32 a, int32 b) -> int32
		uint a = (vm.cpu.registers[0]);
		uint b = (vm.cpu.registers[1]);
		
		Console.Write("mr_div(a={0:D}, b={1:D})",__VA_ARGS__);
		
		vm.cpu.registers[0] = (a / b);
	}
	public static void swi_mr_mod(vm_info_st vm)
	{
		//原型： (int32 a, int32 b) -> int32
		uint a = (vm.cpu.registers[0]);
		uint b = (vm.cpu.registers[1]);
		
		Console.Write("mr_mod(a={0:D}, b={1:D})",__VA_ARGS__);
		
		vm.cpu.registers[0] = (a % b);
	}
	public static byte[] malloc(uint size)
    {
		return new byte[size];
    }
	public static void* malloc(int size)
	{
		return (void*)getBytePtr(malloc((uint)size),0);
	}
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: C# has no equivalent to methods returning pointers to value types:
	//ORIGINAL LINE: byte *read_mrp_file(vm_info_st *vm, sbyte *filename, uint *len, bool lookfor)
	public static byte[] read_mrp_file(vm_info_st vm, ref string filename, ref uint len, uint lookfor)
	{
		uint buflen = 0;
		byte* filebuf = null;

		bool isOut8 = false;
		sbyte* pack_filename = vm.mem->mr_state.pack_filename;

		//ORIGINAL LINE: byte *buffer = (byte *)malloc(DefineConstants.MR_READ_MAX_LEN);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
		//byte[] buffer = malloc(DefineConstants.MR_READ_MAX_LEN);
		byte[] buffer = malloc(1u);
		uint addr = 0;

		//如果是固化应用
		if (pack_filename[0] == '*' || pack_filename[0] == '$')
		{
			string TempName = "";
			string name = DefineConstants.game_EXT;
			byte* mr_m0_file;
			uint pos = 0;
			uint m0file_len;
			int found = 0;
			bool is_rom_file = false;
			uint filelen = 0;
			if (pack_filename[0] == '*')
			{
				mr_m0_file = (byte*)vm.mem->mr_state.mr_m0_files[pack_filename[1] - 'A'];
				name = String((sbyte*)mr_m0_file);  //这里定义文件名为*A即是第一个m0文件 *B是第二个.........
			}
			else if (pack_filename[0] == '$')
			{
				mr_m0_file = (byte*)getBytePtr(vm.cpu.mem.buffer, vm.mem->mr_state.mr_ram_file);
				//name = String(mr_m0_file, 50);


				pos = pos + 4;
				len = *(uint*)&mr_m0_file[pos];
				pos = pos + 4;


				if ((pack_filename[0] == '$'))
				{
					m0file_len = vm.mem->mr_state.mr_ram_file_len;

					//# ifdef MR_AUTHORIZATION
					if ((vm.mem->mr_state.bi & DefineConstants.MR_FLAGS_AI) != 0)
					{
						if (_mr_isMr(&mr_m0_file[52]) != DefineConstants.MR_SUCCESS)
						{
							_mr_readFileShowInfo("unauthorized", 3);
							//goto err;
						}
					}
					//#endif
				}
				else
				{
					m0file_len = *(uint*)&mr_m0_file[pos];
				}

				pos = pos + len;

				while (found == 0)
				{
					if (((pos + 4) >= m0file_len) || (len < 1) || (len >= DefineConstants.MR_MAX_FILE_SIZE))
					{
						_mr_readFileShowInfo(filename, 1004);
						//goto err;
					}
					len = *(uint*)&mr_m0_file[pos];

					pos = pos + 4;
					if (((len + pos) >= m0file_len) || (len < 1) || (len >= DefineConstants.MR_MAX_FILENAME_SIZE))
					{
						_mr_readFileShowInfo(filename, 1002);
						//goto err;
					}
					//MEMSET(TempName, 0, sizeof(TempName));
					TempName = String(&mr_m0_file[pos], len);
					pos = pos + len;
					if (TempName.Contains(filename))
					{
						if (lookfor == 1)
						{
							//goto ret1;
						}
						found = 1;
						len = *(uint*)&mr_m0_file[pos];
						pos = pos + 4;
						if (((len + pos) > m0file_len) || (len < 1) || (len >= DefineConstants.MR_MAX_FILE_SIZE))
						{
							_mr_readFileShowInfo(filename, 1003);
							//goto err;
						}
					}
					else
					{
						len = *(uint*)&mr_m0_file[pos];
						pos = pos + 4 + len;
					}
				}

				filelen = len;
				if (filelen <= 0)
				{
					_mr_readFileShowInfo(filename, 1005);
					//goto err;
				}

				if (lookfor == 2)
				{
					void* retv = (void*)&mr_m0_file[pos];
					//goto end;
				}
				filebuf = &mr_m0_file[pos];
				is_rom_file = true;
			}
			if (filebuf != null)
			{
				buflen = filelen;
				buffer = malloc(filelen);

				memcpy(buffer, 0, filebuf, filelen);

			}
			//buffer = null;
			isOut8 = true;
		}
		//否则从mrp文件读取
		else
		{
			buffer = getFile(buffer, filename, lookfor, ref buflen,ref addr);

		}
		if (buffer == null) return buffer;
		//gzip解压
		if (buffer[0] == 0x1f && buffer[1] == 0x8b)
		{
			uint zlen = 0;

			//ORIGINAL LINE: byte *dst = ungzip(buffer, buflen, null, &zlen);
			byte[] dsts = null;
			byte[] dst = ungzip(ref buffer, (int)buflen, ref dsts, ref zlen);
			//byte[] dst = ungzip(ref buffer, buflen,ref dsts, ref zlen);
			if (dst == null)
			{
				FILE fd = fopen(filename, "rb");
				dsts = new byte[fd.Length];
				fread(dsts, 1, dsts.Length, fd);
				zlen = (uint)dsts.Length;
				//free(buffer);
				//return null;
			}
			//拷贝过去
			buffer = dsts;
			//memcpy(buffer,0, dst,0, zlen);
			buflen = zlen;
		}
		//处理返回
		//if (len == 0)
		{
			len = buflen;
		}
		if (isOut8)
		{
			//len -= 8;
			//byte[] buff2 = new byte[len];
			//memcpy(buff2,0, buffer,8, len);
			//return buff2;

		}
		return buffer;
	}

    private static uint _mr_isMr(byte* v)
    {
        return 1;
    }

    private static void _mr_readFileShowInfo(string v1, int v2)
    {
        throw new NotImplementedException();
    }

    static byte[] getFile(byte[] buffer, string filename, uint lookfor,ref uint buflen,ref uint addr)
    {
        //打开mrp文件
        //sbyte[] mrpfilename = new sbyte[DefineConstants.MAX_FILE_PATH_LEN];
        //mrpfilename = string.Format("{0}{1}{2}", vm.mem->mr_state.sysinfo.sdcard_dir, vm.mem->mr_state.sysinfo.dsm_dir, vm.mem->mr_state.pack_filename);
        sbyte* c = vm.mem->mr_state.sysinfo.sdcard_dir;
        {
            sbyte* cc = vm.mem->mr_state.sysinfo.dsm_dir;
            {
                sbyte* ccc = vm.mem->mr_state.pack_filename;
                {
                    string mrpfilename = String(c) + "/" + String(cc) + "/" + String(ccc);
                    mrp_reader_t reader = mrp_open(mrpfilename);
                    if (reader == null)
                    {
                        free(buffer);
                        return null;
                    }
                    //看看是否存在给定文件
                    mrp_file_info file = mrp_file(reader, ref filename);
                    if (file == null)
                    {
                        mrp_close(reader);
                        free(buffer);
                        return null;
                    }
                    //如果只是为了看看是否存在，则返回1，已经存在了
                    if (lookfor!=0)
                    {
                        free(buffer);
                        //return 1;
                        return null;
                    }
                    //读取文件
                    int ret = mrp_read(reader, ref filename, ref buffer);
					if (0 != ret)
                    {
                        mrp_close(reader);
                        free(buffer);
                        return null;
                    }
                    //读取完成
                    buflen = file.size;
                    vm.mem->mr_state.appInfo.id = (int)reader.info.id;
                    vm.mem->mr_state.appInfo.ver = (int)reader.info.ver;
                    vm.mem->mr_state.appInfo.sidName = 0;
                    //关闭文件
                    mrp_close(reader);
                }
            }
        }
        return buffer;
    }


    public static int do_baseLib_ext(vm_info_st vm,bool isFile)
    {
        //ORIGINAL LINE: byte *ext_data = read_mrp_file(vm, filename, &len, false);
        byte[] ext_data = ext.baseLib_cfunction_ext;
        if (isFile)
        {
            FILE fd = fopen(DefineConstants.START_EXT, "rb");
            if (fd != null)
            {
                ext_data = new byte[fd.Length];
                int n= fd.Read(ext_data, 0, (int)fd.Length);
                if (n != fd.Length)
                {
                   UnityEngine. Debug.LogWarning("Read LogWarning");
                }
                fd.Close();
            }
        }
        //读取ext文件
        uint len = (uint)ext_data.Length;
        if (len != 0 && ext_data != null)
        {
            //读取之后装入到虚拟机内存
            uint addr = mem_malloc(vm, len); //分配虚拟机内存
            //memcpy(vmpt_real(byte, addr), ext_data, len); //装入
            memcpy(addr, ext_data, len);
            free(ext_data); //释放先前分配的内存
                            //调用相关的函数启动虚拟机
            mr_testCom(vm, 0, 0xe2d, 0xb61);
            if (mr_testComC(vm, 800, addr, (int)len, 0) != 0) //用于调用mr_c_function_load
            {
                mem_free(vm, addr, len);
                return -1;
            }
            else
            {
                int ret = mr_testComC(vm, 801, addr, 0x7cd, 6);
                ret = mr_testComC(vm, 801, vm_mem_offset(&vm.mem->mr_state.appInfo), 16, 8);
                ret = mr_testComC(vm, 801, addr, 0x7cd, 0);
                return ret;
            }
        }
        else
        {
            free(ext_data);
            return -1;
        }
    }

    public static void elf(byte[] data)
    {
        byte[] d = new byte[sizeof(elf_head_t)];
       
        
        for(int i=0;i< sizeof(elf_head_t);i++)
        {
            d[i] = data[i];
        }
        elf_head_t head =  *(elf_head_t*)getBytePtr( d);
        //检测是不是elf文件
        //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'memcmp' has no equivalent in C#:
        //if (head.magic.type[0] != 0x7f || memcmp(head.magic.type.Substring(1), "ELF", 3) != 0)
        int v = 0x7f;
        if (head.magic.type[0] != 0x7f || String(head.magic.type).Contains("ELF"))
        {

        }
    }

    public static int do_ext(vm_info_st vm, string filename)
	{
		//读取ext文件
		uint len=0;
//ORIGINAL LINE: byte *ext_data = read_mrp_file(vm, filename, &len, false);
		byte[] ext_data = read_mrp_file(vm, ref filename, ref len, 0);
		if (len != 0 && ext_data != null)
		{
            elf(ext_data);
            //读取之后装入到虚拟机内存
            uint addr = mem_malloc(vm, len); //分配虚拟机内存
											 
			 //memcpy(vmpt_real(byte, addr), ext_data, len); //装入
			memcpy(addr, ext_data, len);
			free(ext_data); //释放先前分配的内存
			//调用相关的函数启动虚拟机
			mr_testCom(vm, 0, 0xe2d, 0xb61);
			if (mr_testComC(vm, 800, addr, (int)len, 0) != 0) //用于调用mr_c_function_load
			{
				mem_free(vm, addr, len);
				return -1;
			}
			else
			{
                int ret = mr_testComC(vm, 801, addr, 0x7cd, 6);
                vm.cpu.cpsr.t = false;
				ret = mr_testComC(vm, 801, vm_mem_offset(&vm.mem->mr_state.appInfo), 16, 8);
                vm.cpu.cpsr.t = false;
                ret = mr_testComC(vm, 801, addr, 0x7cd, 0);
				IsEnd = true;
				return ret;
			}
		}
		else
		{
			free(ext_data);
			return -1;
		}
	}
	public static uint intra_start(vm_info_st vm, string filename, ref string entry)
	{
		//TODO 这个函数还有一些状态没有处理
		vm.mem->mr_state.mr_event_function = 0;
		vm.mem->mr_state.mr_timer_function = 0;
		vm.mem->mr_state.mr_stop_function = 0;
		vm.mem->mr_state.mr_pauseApp_function = 0;
		vm.mem->mr_state.mr_resumeApp_function = 0;
		vm.mem->mr_state.mr_ram_file = 0;
		vm.mem->mr_state.mr_ram_file_len = 0;
		vm.mem->mr_state.mr_c_function_P = 0;
		vm.mem->mr_state.mr_c_function_P_Len = 0;
		vm.mem->mr_state.vm_state = 0;
		vm.mem->mr_state.mr_timer_state = 0;
		vm.mem->mr_state.mr_timer_run_without_pause = 0;
		vm.mem->mr_state.bi &= 2;
		//memset(vm.mem->mr_state.mr_bitmap, 0, sizeof(mr_bitmap_t) * DefineConstants.BITMAPMAX);
		//memset(vm.mem->mr_state.mr_sound, 0, sizeof(mr_sound_t) * DefineConstants.SOUNDMAX);
		//memset(vm.mem->mr_state.mr_sprite, 0, sizeof(mr_sprite_t) * DefineConstants.SPRITEMAX);
		//memset(vm.mem->mr_state.mr_tile, 0, sizeof(mr_tile_t) * DefineConstants.TILEMAX);
		//memset(vm.mem->mr_state.mr_map, 0, 12);
		for (uint i = 0; i < DefineConstants.TILEMAX; i++)
		{
			//vm.mem->mr_state.mr_tile[i].x1 = 0;
			//vm.mem->mr_state.mr_tile[i].y1 = 0;
			//vm.mem->mr_state.mr_tile[i].x2 = (short)(vm.mem->mr_state.sysinfo.screen_width & 0xffff);
			//vm.mem->mr_state.mr_tile[i].y2 = (short)(vm.mem->mr_state.sysinfo.screen_width & 0xffff);
			if (i == 0)
			{
				vm.mem->mr_state.mr_tile.x1 = 0;
				vm.mem->mr_state.mr_tile.y1 = 0;
				vm.mem->mr_state.mr_tile.x2 = (short)(vm.mem->mr_state.sysinfo.screen_width & 0xffff);
				vm.mem->mr_state.mr_tile.y2 = (short)(vm.mem->mr_state.sysinfo.screen_width & 0xffff);
			}
			if (i == 1)
			{
				vm.mem->mr_state.mr_tile2.x1 = 0;
				vm.mem->mr_state.mr_tile2.y1 = 0;
				vm.mem->mr_state.mr_tile2.x2 = (short)(vm.mem->mr_state.sysinfo.screen_width & 0xffff);
				vm.mem->mr_state.mr_tile2.y2 = (short)(vm.mem->mr_state.sysinfo.screen_width & 0xffff);
			}
			if (i == 2)
			{
				vm.mem->mr_state.mr_tile3.x1 = 0;
				vm.mem->mr_state.mr_tile3.y1 = 0;
				vm.mem->mr_state.mr_tile3.x2 = (short)(vm.mem->mr_state.sysinfo.screen_width & 0xffff);
				vm.mem->mr_state.mr_tile3.y2 = (short)(vm.mem->mr_state.sysinfo.screen_width & 0xffff);
			}
		}
		if (entry == null)
		{
			entry = "_dsm";
		}
		sbyte* a = vm.mem->mr_state.entry;
		{
			memset(a, 0, MR_FILE_MAX_LEN);
			//memcpy(a, entry.Substring(0, MR_FILE_MAX_LEN - 1).ToCharArray(), entry.Length);
			memcpy(a, entry, entry.Length);
		}
		vm.mem->mr_state.mr_state = 1;
		logi("intra_start(vm=%p, filename=%s, entry=%s)", vm, filename, entry);
		int ret = -1;
		if (GameStart.Ins.UesExt)
			ret = do_baseLib_ext(vm, true);
		else
		{
			ret = do_ext(vm, filename);
		}

        if (ret != 0&&!GameStart.Ins.isUpdate )
		{
			//if (GameStart.Ins.UesExt)
   //         {
			//	string fullpathname = "";
			//	string dsm_gm_Mrp = DefineConstants.dsm_gm_Mrp;
			//	get_filename(vm, ref fullpathname, ref dsm_gm_Mrp);
			//	ret = do_ext(vm, fullpathname);
			//}
		    vm.mem->mr_state.mr_state = 5;
			UnityEngine.Debug.LogWarning("MR_FAILED ret: " + ret);
			return DefineConstants.MR_FAILED;
		}
		return DefineConstants.MR_SUCCESS;
	}

	//调用一次事件处理函数
	public static int _mr_event_param(vm_info_st vm, uint code, uint param0, uint param1)
	{
		*vmreg(0) = code;
		*vmreg(1) = param0;
		*vmreg(2) = param1;
		return 0;
	}
	public static int mr_event(vm_info_st vm, uint code, uint param0, uint param1)
	{
		logi("mr_event(code=%d, param0=%d, param1=%d)", code, param0, param1);
		//设置参数，准备调用
		_mr_event_param(vm, code, param0, param1);
		if (vm.mem->mr_state.mr_event_function == 0)
		{
			vm.mem->mr_state.com_param_event.code = code;
			vm.mem->mr_state.com_param_event.param0 = param0;
			vm.mem->mr_state.com_param_event.param1 = param1;
			int ret = mr_testComC(vm, 801, vm_mem_offset(&vm.mem->mr_state.com_param_event), sizeof(mr_com_event_t), 1);
			return ret;
		}
		else
		{
			return (int)vm_run(vm, vm.mem->mr_state.mr_event_function);
		}
	}
    public static int mr_timer(vm_info_st vm)
    {
        //设置参数，准备调用
        if (vm.mem->mr_state.mr_timer_function == 0)
        {
            logi("mr_timer",801,0,1,2);
            int ret = mr_testComC(vm, 801, 0, 1, 2);
            if(ret!=0)
            {
                GameStart.Ins.isUpdate = true;
            }
            return ret;
        }
        else
        {
            return (int)vm_run(vm, vm.mem->mr_state.mr_timer_function);
        }
    }
    public static int mr_stop(vm_info_st vm,uint code)
    {
        //设置参数，准备调用
        if (vm.mem->mr_state.mr_stop_function == 0)
        {
            logi("mr_stop");
            vm.mem->mr_state.com_param_event.code = code;
            vm.mem->mr_state.com_param_event.param0 = 0;
            vm.mem->mr_state.com_param_event.param1 = 0;
            int ret = mr_testComC(vm, 801, vm_mem_offset(&vm.mem->mr_state.com_param_event), sizeof(mr_com_event_t), 1);
            return ret;
        }
        else
        {
            return (int)vm_run(vm, vm.mem->mr_state.mr_stop_function);
        }
    } 
    public static void mr_pauseApp()
    {
        mr_testComC(vm, 801, 0, 1, 4);
    }
    public const int MR_FILE_MAX_LEN = 128; //mrp文件名及mrp内部文件名的最大长度
	//public static uint mr_start_dsm(vm_info_st vm, char* entry)
	//{
	//	fixed (char* f = vm.mem->mr_state.pack_filename)
	//	{
	//		memset(f, 0, MR_FILE_MAX_LEN);
	//		if (null != entry && *entry == '*')
	//		{
	//			f = entry;
	//		}
	//		else if (null != entry && *entry == '%')
	//		{
	//			vm.mem->mr_state.pack_filename = ++entry;
	//		}
	//		else if (null != entry && *entry == '#' && entry[1] == '<')
	//		{
	//			vm.mem->mr_state.pack_filename = ++entry;
	//		}
	//		else
	//		{
	//			vm.mem->mr_state.pack_filename = "*A";
	//		}
	//		memset(vm.mem->mr_state.old_pack_filename, 0, MR_FILE_MAX_LEN);
	//		memset(vm.mem->mr_state.old_start_filename, 0, MR_FILE_MAX_LEN);
	//		memset(vm.mem->mr_state.start_file_parameter, 0, MR_FILE_MAX_LEN);
	//		logi("mr_start_dsm(vm=%p, entry=%s, pack_filename=%s)", vm, entry, vm.mem->mr_state.pack_filename);
	//	}
	//	return intra_start(vm, DefineConstants.START_FILE_NAME, ref entry);
	//}
//	public static uint mr_start_dsmB(vm_info_st vm, ref string entry)
//	{
//		memset(vm.mem->mr_state.pack_filename, 0, MR_FILE_MAX_LEN);
//		if (null != entry && entry[0] == '*')
//		{
//			vm.mem->mr_state.pack_filename = entry;
//		}
//		else if (null != entry && entry[0] == '%')
//		{
////ORIGINAL LINE: sbyte *p = strchr(entry, ',');
//			string p = StringFunctions.StrChr(entry, ',');
//			//Gai
//			if (null != p)
//			{
//				p = null;
//				vm.mem->mr_state.pack_filename = entry.Substring(1);
//				//p = (sbyte)',';
//				p = ",";
//			}
//			else
//			{
//				vm.mem->mr_state.pack_filename = entry.Substring(1);
//			}
//		}
//		else if (null != entry && entry[0] == '#' && entry[1] == '<')
//		{
//			vm.mem->mr_state.pack_filename = entry.Substring(2);
//		}
//		else
//		{
//			vm.mem->mr_state.pack_filename = "*A";
//		}
//		memset(vm.mem->mr_state.old_pack_filename, 0, MR_FILE_MAX_LEN);
//		memset(vm.mem->mr_state.old_start_filename, 0, MR_FILE_MAX_LEN);
//		memset(vm.mem->mr_state.start_file_parameter, 0, MR_FILE_MAX_LEN);
//		logi("mr_start_dsmB(vm=%p, entry=%s, pack_filename=%s)", vm, entry, vm.mem->mr_state.pack_filename);
//		return intra_start(vm, DefineConstants.START_FILE_NAME, ref entry);
//	}
	public static uint mr_start_dsmC(vm_info_st vm, ref string entry)
	{
		sbyte* f = vm.mem->mr_state.pack_filename;
		{
			memset(f, 0, MR_FILE_MAX_LEN);
			//sbyte* fs = f;
            if (null != entry && entry[0] == '*')
            {
                memcpy(f, entry,entry .Length);
            }
            else if (null != entry && entry[0] == '%')
            {
                string name = entry.Substring(1);
               
                memcpy(f, name, name.Length);
			}
            else if (null != entry && entry[0] == '#' && entry[1] == '<')
            {
                string name = entry.Substring(2);
                memcpy(f, name, name.Length);
            }
            else
            {
				//vm.mem->mr_state.pack_filename = "*A";
				string a = "*A";
				memcpy(f, a, a.Length);
			}
			if(GameStart.isLog)
            {
			    string str = String(f);
				print(str);
            }
           // memset(vm.mem->mr_state.old_pack_filename, 0, MR_FILE_MAX_LEN);
           // memset(vm.mem->mr_state.old_start_filename, 0, MR_FILE_MAX_LEN);
           // memset(vm.mem->mr_state.start_file_parameter, 0, MR_FILE_MAX_LEN);
            logi("mr_start_dsmC(vm=%p, entry=%s, pack_filename=%s)", vm, entry, f);
        }
		return intra_start(vm, DefineConstants.START_FILE_NAME, ref entry);
	}
	public static uint mr_start_dsm_ex(vm_info_st vm, ref string path, ref string entry)
	{
		//memset(vm.mem->mr_state.pack_filename, 0, MR_FILE_MAX_LEN);
		//if (null != path && path[0] == '*')
		//{
		//	vm.mem->mr_state.pack_filename = path;
		//}
		//else if (null != path && path[0] == '%')
		//{
		//	vm.mem->mr_state.pack_filename = path.Substring(1);
		//}
		//else if (null != path && path[0] == '#' && path[1] == '<')
		//{
		//	vm.mem->mr_state.pack_filename = path.Substring(2);
		//}
		//else
		//{
		//	vm.mem->mr_state.pack_filename = "*A";
		//}
		//memset(vm.mem->mr_state.old_pack_filename, 0, MR_FILE_MAX_LEN);
		//memset(vm.mem->mr_state.old_start_filename, 0, MR_FILE_MAX_LEN);
		//memset(vm.mem->mr_state.start_file_parameter, 0, MR_FILE_MAX_LEN);
		//logi("mr_start_dsm_ex(vm=%p, path=%s, entry=%s, pack_filename=%s)", vm, path, entry, vm.mem->mr_state.pack_filename);
		return intra_start(vm, DefineConstants.START_FILE_NAME, ref entry);
	}
	public static uint mr_testCom(vm_info_st vm, uint L, uint input0, uint input1)
	{
		logi("mr_testCom(vm=%p, L=%d, input0=%d, input1=%d)", vm, L, input0, input1);
		uint ret = DefineConstants.MR_SUCCESS;
		switch (input0)
		{
		case 0x01:
			ret = mr_getTime(vm);
			break;
		case 0x02:
			vm.mem->mr_state.mr_event_function = (uint)input1;
			break;
		case 0x03:
			vm.mem->mr_state.mr_timer_function = (uint)input1;
			break;
		case 0x04:
			vm.mem->mr_state.mr_stop_function = (uint)input1;
			break;
		case 0x05:
			vm.mem->mr_state.mr_pauseApp_function = (uint)input1;
			break;
		case 0x06:
			vm.mem->mr_state.mr_resumeApp_function = (uint)input1;
			break;
		case 0x07:
			ret = (uint)input1;
			break;
            case 9:
                vm.mem->mr_state.appInfo.ram = (int)input1;
                break;
            case 0x64:
			ret = vm.mem->mr_state.mem_state.min;
			break;
		case 0x65:
			ret = vm.mem->mr_state.mem_state.top;
			break;
		case 0x66:
			ret = vm.mem->mr_state.mem_state.left;
			break;
		case 0xc8:
			ret = mr_startShake(vm, input1);
			break;
		case 0x12c:
			vm.mem->mr_state.mr_soundOn = (sbyte)input1;
			break;
		case 0x12d:
			vm.mem->mr_state.mr_shakeOn = (sbyte)input1;
				break;
			//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not allow fall-through from a non-empty 'case':
		case 0x12e:
			vm.mem->mr_state.bi |= 0x4;
			break;
		case 0x12f:
			vm.mem->mr_state.bi &= ~0x4;
			break;
		case 0x130:
			vm.mem->mr_state.bi |= 0x8;
			break;
		case 0x131:
			vm.mem->mr_state.bi &= ~0x8;
			break;
		case 0x132:
			vm.mem->mr_state.mr_sms_return_flag = 1;
			vm.mem->mr_state.mr_sms_return_val = (int)input1;
			break;
		case 0x133:
			vm.mem->mr_state.mr_sms_return_flag = 0;
			break;
		case 0x190:
			mr_sleep(vm, input1);
			break;
		case 0x191:
			ret = vm.mem->mr_state.sysinfo.screen_width;
			vm.mem->mr_state.sysinfo.screen_width = (uint)input1;
			break;
		case 0x194:
			logw("mr_testCom got unkown param: code=%d", input0);
			// _mr_newSIMInd((int16)input1, NULL);
			break;
		case 0x195:
			logw("mr_testCom got unkown param: code=%d", input0);
			// ret = mr_closeNetwork();
			break;
		case 0x196:
			ret = vm.mem->mr_state.sysinfo.screen_height;
			vm.mem->mr_state.sysinfo.screen_height =(uint)input1;
			break;
		case 0x197:
			logw("mr_testCom got unkown param: code=%d", input0);
			// mr_timer_run_without_pause = (void *)input1;
			// mr_plat(1202, input1);
			break;
		case 0x198:
			logw("mr_testCom got unkown param: code=%d", input0);
			//TODO
			break;
		case 0x1f4:
			logw("mr_testCom got unkown param: code=%d", input0);
			// ret = _mr_load_sms_cfg();
			break;
		case 0x1f7:
			logw("mr_testCom got unkown param: code=%d", input0);
			// {
			// 	uint8 dst;
			// 	_mr_smsGetBytes(5, &dst, 1);
			// 	ret = dst;
			// }
			break;
		case 0x1f8:
			logw("mr_testCom got unkown param: code=%d", input0);
			// ret = _mr_save_sms_cfg(input1);
			break;
		case 0xcb3:
			if (0x9E67A == input1)
			{
				vm.mem->mr_state.bi &= ~0x2;
			}
			break;
		case 0xe2d:
			if (0xb61 == input1)
			{
				vm.mem->mr_state.bi |= 0x1;
			}
			break;
		case 0xf51:
			if (0x18030 == input1)
			{
				vm.mem->mr_state.bi |= 0x2;
			}
			break;
		default:
			logw("mr_testCom got unkown param: code=%d", input0);
			ret = DefineConstants.MR_IGNORE;
		break;
		}
		return ret;
	}
	public static uint mr_TestCom1(vm_info_st vm, uint L, uint input0, uint input1, uint len)
	{
        
       // string s = String(vm.cpu.mem.buffer, input1);
		uint ret = DefineConstants.MR_SUCCESS;

		switch (input0)
        {
			case 900:
				ret = PLATEX();
				break;
            default:
                break;
        }
        print("mr_TestCom1 input: " + input0);

		return ret;
	}
	public static int mr_testComC(vm_info_st vm, int type, uint input, int len, int code)
	{
		logi("mr_testComC(mv=%p, type=%d, input=0x%08x, len=%d, code=%d)", vm, type, input, len, code);
		//调用mr_load_c_function函数
		if (type == 800)
		{
			//*vmpt_real(uint, input) = (uint)vm_mem_offset(vm.mem->mr_func_tab); //设置函数表
			uint* t = vm.mem->mr_func_tab;
			* ((uint*)vmpt_real(input)) =vm_mem_offset(t); //设置函数表
			vm.mem->mr_state.mr_c_function_load = input+GameStart.Ins.into ; //保存入口函数
           
            //启动程序
            return (int)vm_run(vm, vm.mem->mr_state.mr_c_function_load);
		}
		//调用mr_c_function函数，这个函数在mr_c_function_new中被设置
		else
		{
			*vmreg(0) = vm.mem->mr_state.mr_c_function_P; //参数1： mr_c_function_P
			*vmreg(1) = (uint)code; //参数2： code
			*vmreg(2) = input; //参数3： input
			*vmreg(3) = (uint)len; //参数4： len
			return (int)vm_run(vm, vm.mem->mr_state.mr_c_function);
		}
	}
	public static uint mr_getTime(vm_info_st vm)
	{
		timeval t = new timeval();
		int ret = gettimeofday(t, null);
		if (t.tv_usec < 0)
		{
			t.tv_sec--;
			t.tv_usec += 1000000;
		}
		//return (ret == 0) ? (uint)((t.tv_sec - vm.startTime.tv_sec) * 1000 + (t.tv_usec - vm.startTime.tv_usec) / 1000) : 0u;
		return (ret == 0) ? (uint)(t.tv_sec - vm.startTime.tv_sec): 0u;
    }
	//
	public static uint mr_startShake(vm_info_st vm, uint ms)
	{
		//需要检测是否已经在震动
		//TODO手机震动
		return DefineConstants.MR_SUCCESS;
	}
	public static uint mr_sleep(vm_info_st vm, uint ms)
	{
		//TODO这里应该让虚拟机睡眠，而不是系统睡眠
		usleep(ms);
		return DefineConstants.MR_SUCCESS;
	}
	public static uint mr_plat(vm_info_st vm, uint code, uint param)
	{
        switch (code)
        {
			case DefineConstants.MR_CHECK_TOUCH:  // 1205是否支持触屏
				return DefineConstants.MR_TOUCH_SCREEN;
			case DefineConstants.MR_GET_HANDSET_LG:  // 1206获取语言
				return DefineConstants.MR_CHINESE;
			case 1218:  // 查询存储卡的状态
				return DefineConstants.MR_MSDC_OK;
			default:
                break;
        }
        return DefineConstants.MR_IGNORE;
	}
	public static uint mr_platEx(vm_info_st vm, uint code, uint input, uint input_len, byte** output, int* output_len, uint cb)
	{
		switch (code)
		{
			case DefineConstants.MR_SWITCHPATH:
				//return dsmSwitchPath(input, input_len, output, output_len);
			default:
				break;
		}
		return DefineConstants.MR_IGNORE;
	}
	public static int fmt_printf(sbyte* format, ref byte[] memBase, arg_list* arg)
	{
		sbyte[] buffer = new sbyte[1];
		fixed( sbyte* b = &buffer[0])
        {
		  return _fmt_vsnprintf(_out_char,  b, (uint.MaxValue), format, ref memBase, arg);
        }
	}
	public static int fmt_sprintf(sbyte* buffer, sbyte* format, ref byte[] memBase, arg_list* arg)
	{
		return _fmt_vsnprintf(_out_buffer, buffer, (uint.MaxValue), format, ref memBase, arg);
	}
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int fmt_snprintf(ref string buffer, uint count, ref string format, ref byte memBase, arg_list arg);
	
	//ORIGINAL LINE: #define MR_SPRITE_INDEX_MASK (0x03FF)
	
	//ORIGINAL LINE: #define MR_SPRITE_TRANSPARENT (0x0400)
	
	//ORIGINAL LINE: #define FLAGS_ZEROPAD (1u << 0u)
	
	//ORIGINAL LINE: #define FLAGS_LEFT (1u << 1u)
	
	//ORIGINAL LINE: #define FLAGS_PLUS (1u << 2u)
	
	//ORIGINAL LINE: #define FLAGS_SPACE (1u << 3u)
	
	//ORIGINAL LINE: #define FLAGS_HASH (1u << 4u)
	
	//ORIGINAL LINE: #define FLAGS_UPPERCASE (1u << 5u)
	
	//ORIGINAL LINE: #define FLAGS_CHAR (1u << 6u)
	
	//ORIGINAL LINE: #define FLAGS_SHORT (1u << 7u)
	
	//ORIGINAL LINE: #define FLAGS_LONG (1u << 8u)
	
	//ORIGINAL LINE: #define FLAGS_LONG_LONG (1u << 9u)
	
	//ORIGINAL LINE: #define FLAGS_PRECISION (1u << 10u)
	
	//ORIGINAL LINE: #define FLAGS_ADAPT_EXP (1u << 11u)
	//public delegate void out_fct_type(sbyte character, object buffer, uint idx, uint maxlen); //输出函数
	public delegate void out_fct_type(char character, sbyte* buffer, uint idx, uint maxlen); //输出函数
	
	//ORIGINAL LINE: #define arg_va(arg, type) (*(type *)arg_get_item((arg), sizeof(type)))
	/*
	获取参数
	参数：
		arg_list		参数列表对象
		len				参数长度（单位：字节）
	*/
	public unsafe static void* arg_get_item(arg_list* arg, uint len)
	{
		//取得参数所在位置
		
		//ORIGINAL LINE: byte *pos = (byte *)arg + 4 + arg->n;
		//arg_list* arg = (arg_list*)args;
		byte * pos = (byte*)arg + 4 + arg->n;
		//计算下一个参数位置
		if (len <= 4 && arg->n < 16)
		{
			arg->n += 4;
		}
		else if (arg->n < 16)
		{
			while (arg->n < 16 && len > 0)
			{
				arg->n += 4;
				len -= 4;
			}
			if (len > 0)
			{
				arg->n += (uint)len;
			}
		}
		else
		{
			arg->n += len;
		}
		//返回指针
		return pos;
	}
	// internal buffer output
	internal static void _out_buffer(char character, sbyte* buffer, uint idx, uint maxlen)
	{
		if (idx < maxlen)
		{
			buffer[(int)idx]=(sbyte)character;
			//buffer[(int)idx] = character;
		}
	}
	// internal null output
	internal static void _out_null(char character, sbyte* buffer, uint idx, uint maxlen)
	{
		//character;
		//buffer;
		//idx;
		//maxlen;
	}
	// internal _putchar wrapper
	internal static void _out_char(char character, sbyte* buffer, uint idx, uint maxlen)
	{
		//buffer;
		//idx;
		//maxlen;
		if (character != 0)
		{
			//Console.Write(((char)character).ToString());
		}
	}
	// internal output function wrapper
	internal static void _out_fct(char character, sbyte* buffer, uint idx, uint maxlen)
	{
		//idx;
		//maxlen;
		if (character != 0)
		{
			//((out_fct_wrap_type*)buffer)->fct(character, ((out_fct_wrap_type*)buffer).arg);
		}
	}
	

	// internal test if char is a digit (0-9)
	// return true if char is a digit
	internal static bool _is_digit(sbyte ch)
	{
		return (ch >= (sbyte)'0') && (ch <= (sbyte)'9');
	}
	internal static bool _is_digit(char ch)
	{
		return Char.IsDigit(ch);
	}
	// internal ASCII string to unsigned int conversion
	internal static uint _atoi(string str)
	{
		uint i = 0U;
        while (_is_digit((sbyte)str[0]))
        {
            i = i * 10U + (uint)((byte)(str[0]) - (byte)'0');
            if (str.Length == 1)
                return i;
            str =str.Substring(1);
        }
        return i;
	}
	//internal static uint _atoi(string str)
	//{
	//	return (uint)Convert.ToInt32(str);
	//}
	// output the specified string in reverse, taking care of any zero-padding
	internal static uint _out_rev(out_fct_type @out, sbyte * buffer, uint idx, uint maxlen,byte* buf, uint len, uint width, uint flags)
	{
		uint start_idx = idx;
		// pad spaces up to given width
		if ((flags & (1u << 1))==0 && (flags & (1u << 0))==0)
		{
			for (uint i = len; i < width; i++)
			{
				@out(' ', buffer, idx++, maxlen);
			}
		}
		if(GameStart .isPrint)
        {
			string s = String((sbyte*)buf);
			print(s);
		}
       
        // reverse string
        while (len != 0)
		{
            @out((char)buf[(int)(--len)], buffer, idx++, maxlen);
            //--len;
            //idx++;
        }
		// append pad spaces up to given width
		if ((flags & (1u << 1)) != 0)
		{
			while (idx - start_idx < width)
			{
				@out(' ', buffer, idx++, maxlen);
			}
		}
		return idx;
	}
	// internal itoa format
	internal static uint _ntoa_format(out_fct_type @out, sbyte* buffer, uint idx, uint maxlen,byte* buf, int len, bool negative, uint @base, uint prec, uint width, uint flags)
	{
	
		// pad leading zeros
		if (((flags & (1u << 1)) == 0))
		{
			if (width != 0 && (flags & (1u << 0))!=0 && (negative || (flags & ((1u << 2) | (1u << 3)))!=0))
			{
				width--;
			}
			while ((len < prec) && (len < DefineConstants.PRINTF_NTOA_BUFFER_SIZE))
			{
				buf[len++] = (byte)'0';
			}
			while ((flags & (1u << 0))!=0 && (len < width) && (len < DefineConstants.PRINTF_NTOA_BUFFER_SIZE))
			{
				buf[len++] = (byte)'0';
			}
		}
		// handle hash
		if ((flags & (1u << 4)) != 0)
		{
			if (!((flags & (1u << 10))!=0) && len != 0 && ((len == prec) || (len == width)))
			{
				len--;
				if (len != 0 && (@base == 16U))
				{
					len--;
				}
			}
			if ((@base == 16U) && (flags & (1u << 5))==0 && (len < DefineConstants.PRINTF_NTOA_BUFFER_SIZE))
			{
				buf[len++] = (byte)'x';
			}
			else if ((@base == 16U) && (flags & (1u << 5))!=0 && (len < DefineConstants.PRINTF_NTOA_BUFFER_SIZE))
			{
				buf[len++] = (byte)'X';
			}
			else if ((@base == 2U) && (len < DefineConstants.PRINTF_NTOA_BUFFER_SIZE))
			{
				buf[len++] = (byte)'b';
			}
			if (len < DefineConstants.PRINTF_NTOA_BUFFER_SIZE)
			{
				buf[len++] = (byte)'0';
			}
		}
		if (len < DefineConstants.PRINTF_NTOA_BUFFER_SIZE)
		{
			if (negative)
			{
				buf[len++] = (byte)'-';
			}
			else if ((flags & (1u << 2))!=0)
			{
				buf[len++] = (byte)'+'; // ignore the space if the '+' exists
			}
			else if ((flags & (1u << 3))!=0)
			{
				buf[len++] = (byte)' ';
			}
		}
		return _out_rev(@out, buffer, idx, maxlen, buf, (uint)len, width, flags);
	}
	// internal itoa for 'long' type
	internal static uint _ntoa_long(out_fct_type @out, sbyte* buffer, uint idx, uint maxlen, uint value, bool negative, uint @base, uint prec, uint width, uint flags)
	{
		byte* buf =(byte*)getBytePtr(new byte[DefineConstants.PRINTF_NTOA_BUFFER_SIZE]);
		int len = 0;
		// no hash for 0 values
		if (value == 0)
		{
			flags &= ~(1u << 4);
		}
		// write if precision != 0 and value is != 0
		if ((flags & (1u << 10))==0 || value != 0)
		{
			do
			{
				byte digit = (byte)(value % @base);
                buf[len++] = digit < 10 ? (byte)((byte)'0' + digit) : (byte)((flags & (1u << 5)) != 0 ? (byte)'A' : (byte)'a' + digit - 10);
				value /= @base;
			} while (value != 0 && (len < DefineConstants.PRINTF_NTOA_BUFFER_SIZE));
		}
		return _ntoa_format(@out, buffer, idx, maxlen, buf, len, negative, (uint)@base, prec, width, flags);
	}
	internal static uint _ntoa_long_long(out_fct_type @out, sbyte* buffer, uint idx, uint maxlen, ulong value, bool negative, ulong @base, uint prec, uint width, uint flags)
	{
		//string buf = new string(new char[DefineConstants.PRINTF_NTOA_BUFFER_SIZE]);
        byte* buf = (byte*)getBytePtr(new byte[DefineConstants.PRINTF_NTOA_BUFFER_SIZE]);
        int len = 0;
		// no hash for 0 values
		if (value == 0)
		{
			flags &= ~(1u << 4);
		}
		// write if precision != 0 and value is != 0
		if ((flags & (1u << 10))==0 || value != 0)
		{
			do
			{
				byte digit = (byte)(value % @base);
                buf[len++] = digit < 10 ? (byte)((byte)'0' + digit ): (byte)((flags & (1u << 5)) != 0 ? 'A' : 'a' + digit - 10);
                value /= @base;
			} while (value != 0 && (len < DefineConstants.PRINTF_NTOA_BUFFER_SIZE));
		}
		return _ntoa_format(@out, buffer, idx, maxlen, buf, len, negative, (uint)@base, prec, width, flags);
	}
// internal ftoa variant for exponential floating-point type, contributed by Martijn Jasperse <m.jasperse@gmail.com>
	// forward declaration so that _ftoa can switch to exp notation for values > PRINTF_MAX_FLOAT
	internal static uint _etoa(out_fct_type @out, sbyte* buffer, uint idx, uint maxlen, double value, uint prec, uint width, uint flags)
	{
		// check for NaN and special values
		if ( (value > double.MaxValue) || (value < -double.MaxValue))
		{
			return _ftoa(@out, buffer, idx, maxlen, value, prec, width, flags);
		}
		// determine the sign
		bool negative = value < 0;
		if (negative)
		{
			value = -value;
		}
		// default precision
		if (((flags & (1u << 10)) == 0))
		{
			prec = DefineConstants.PRINTF_DEFAULT_FLOAT_PRECISION;
		}
		// determine the decimal exponent
		// based on the algorithm by David Gay (https://www.ampl.com/netlib/fp/dtoa.c)
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Unions within methods are not supported in C#:
		//union
		//{
		//    ulong U;
		//    double F;
		//}
		union conv=new union();
		conv.F = value;
		int exp2 = (int)((conv.U >> 52) & 0x07FFU) - 1023; // effectively log2
		conv.U = (conv.U & ((1UL << 52) - 1U)) | (1023UL << 52); // drop the exponent so conv.F is now in [1,2)
		// now approximate log10 from the log2 integer part and an expansion of ln around 1.5
		int expval = (int)(0.1760912590558 + exp2 * 0.301029995663981 + (conv.F - 1.5) * 0.289529654602168);
		// now we want to compute 10^expval but we want to be sure it won't overflow
		exp2 = (int)(expval * 3.321928094887362 + 0.5);
		double z = expval * 2.302585092994046 - exp2 * 0.6931471805599453;
		double z2 = z * z;
		conv.U = (ulong)(exp2 + 1023) << 52;
		// compute exp(z) using continued fractions, see https://en.wikipedia.org/wiki/Exponential_function#Continued_fractions_for_ex
		conv.F *= 1 + 2 * z / (2 - z + (z2 / (6 + (z2 / (10 + z2 / 14)))));
		// correct for rounding errors
		if (value < conv.F)
		{
			expval--;
			conv.F /= 10;
		}
		// the exponent format is "%+03d" and largest value is "307", so set aside 4-5 characters
		uint minwidth = ((expval < 100) && (expval > -100)) ? 4U : 5U;
		// in "%g" mode, "prec" is the number of *significant figures* not decimals
		if ((flags & (1u << 11)) != 0)
		{
			// do we want to fall-back to "%f" mode?
			if ((value >= 1e-4) && (value < 1e6))
			{
				if ((int)prec > expval)
				{
					prec = (uint)((int)prec - expval - 1);
				}
				else
				{
					prec = 0;
				}
				flags |= (1u << 10); // make sure _ftoa respects precision
				// no characters in exponent
				minwidth = 0U;
				expval = 0;
			}
			else
			{
				// we use one sigfig for the whole part
				if ((prec > 0) && (flags & (1u << 10))!=0)
				{
					--prec;
				}
			}
		}
		// will everything fit?
		uint fwidth = width;
		if (width > minwidth)
		{
			// we didn't fall-back so subtract the characters required for the exponent
			fwidth -= minwidth;
		}
		else
		{
			// not enough characters, so go back to default sizing
			fwidth = 0U;
		}
		if ((flags & (1u << 1))!=0 && minwidth != 0)
		{
			// if we're padding on the right, DON'T pad the floating part
			fwidth = 0U;
		}
		// rescale the float value
		if (expval != 0)
		{
			value /= conv.F;
		}
		// output the floating part
		uint start_idx = idx;
		idx = _ftoa(@out, buffer, idx, maxlen, negative ? -value : value, prec, fwidth, flags & ~(1u << 11));
		// output the exponent part
		if (minwidth != 0)
		{
			// output the exponential symbol
			@out(((flags & (1u << 5)) != 0) ? 'E' : 'e', buffer, idx++, maxlen);
			// output the exponent value
			idx = _ntoa_long(@out,  buffer, idx, maxlen,(uint)( (expval < 0) ? -expval : expval), expval < 0, 10, 0, minwidth - 1, (1u << 0) | (1u << 2));
			// might need to right-pad spaces
			if ((flags & (1u << 1)) != 0)
			{
				while (idx - start_idx < width)
				{
					@out(' ', buffer, idx++, maxlen);
				}
			}
		}
		return idx;
	}
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: This was formerly a static local variable declaration (not allowed in C#):
private static double[] _ftoa_pow10 = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
	// internal ftoa for fixed decimal floating point
	internal static uint _ftoa(out_fct_type @out, sbyte* buffer, uint idx, uint maxlen, double value, uint prec, uint width, uint flags)
	{
		string buf = new string(new char[DefineConstants.PRINTF_FTOA_BUFFER_SIZE]);
		uint len = 0U;
		double diff = 0.0;
		// powers of 10
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: This static local variable declaration (not allowed in C#) has been moved just prior to the method:
	//	static double pow10[] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
		// test for special values
		if (value != value)
		{
			string str = "nan";
			return _out_rev(@out,  buffer, idx, maxlen,(byte*)getBytePtr(Encoding.Default.GetBytes(str)), 3, width, flags);
		}
		if (value < -double.MaxValue)
		{
			string str = "fni-";
			return _out_rev(@out,  buffer, idx, maxlen, (byte*)getBytePtr(Encoding.Default.GetBytes(str)), 4, width, flags);
		}
		if (value > double.MaxValue)
		{
			string str = ((flags & (1u << 2)) != 0) ? "fni+" : "fni";
			return _out_rev(@out,  buffer, idx, maxlen, (byte*)getBytePtr(Encoding.Default.GetBytes(str)), ((flags & (1u << 2)) != 0) ? 4U : 3U, width, flags);
		}
		// test for very large values
		// standard printf behavior is to print EVERY whole number digit -- which could be 100s of characters overflowing your buffers == bad
		if ((value > DefineConstants.PRINTF_MAX_FLOAT) || (value < -DefineConstants.PRINTF_MAX_FLOAT))
		{
			return _etoa(@out,  buffer, idx, maxlen, value, prec, width, flags);
		}
		// test for negative
		bool negative = false;
		if (value < 0)
		{
			negative = true;
			value = 0 - value;
		}
		// set default precision, if not set explicitly
		if (((flags & (1u << 10)) == 0))
		{
			prec = DefineConstants.PRINTF_DEFAULT_FLOAT_PRECISION;
		}
		// limit precision to 9, cause a prec >= 10 can lead to overflow errors
		while ((len < DefineConstants.PRINTF_FTOA_BUFFER_SIZE) && (prec > 9U))
		{
			buf = StringFunctions.ChangeCharacter(buf, len++, '0');
			prec--;
		}
		int whole = (int)value;
		double tmp = (value - whole) * _ftoa_pow10[prec];
		uint frac = (uint)tmp;
		diff = tmp - frac;
		if (diff > 0.5)
		{
			++frac;
			// handle rollover, e.g. case 0.99 with prec 1 is 1.0
			if (frac >= _ftoa_pow10[prec])
			{
				frac = 0;
				++whole;
			}
		}
		else if (diff < 0.5)
		{
		}
		else if ((frac == 0U) || (frac & 1U)!=0)
		{
			// if halfway, round up if odd OR if last digit is 0
			++frac;
		}
		if (prec == 0U)
		{
			diff = value - (double)whole;
			if ((!(diff < 0.5) || (diff > 0.5)) && (whole & 1)!=0)
			{
				// exactly 0.5 and ODD, then round up
				// 1.5 -> 2, but 2.5 -> 2
				++whole;
			}
		}
		else
		{
			uint count = prec;
			// now do fractional part, as an unsigned number
			while (len < DefineConstants.PRINTF_FTOA_BUFFER_SIZE)
			{
				--count;
				buf = StringFunctions.ChangeCharacter(buf, len++, (char)(48U + (frac % 10U)));
				if ((frac /= 10U)==0)
				{
					break;
				}
			}
			// add extra 0s
			while ((len < DefineConstants.PRINTF_FTOA_BUFFER_SIZE) && (count-- > 0U))
			{
				buf = StringFunctions.ChangeCharacter(buf, len++, '0');
			}
			if (len < DefineConstants.PRINTF_FTOA_BUFFER_SIZE)
			{
				// add decimal
				buf = StringFunctions.ChangeCharacter(buf, len++, '.');
			}
		}
		// do whole part, number is reversed
		while (len < DefineConstants.PRINTF_FTOA_BUFFER_SIZE)
		{
			buf = StringFunctions.ChangeCharacter(buf, len++, (char)(48 + (whole % 10)));
			if ((whole /= 10)==0)
			{
				break;
			}
		}
		// pad leading zeros
		if ((flags & (1u << 1))==0 && (flags & (1u << 0))!=0)
		{
			if (width != 0 && (negative || (flags & ((1u << 2) | (1u << 3))) != 0))
			{
				width--;
			}
			while ((len < width) && (len < DefineConstants.PRINTF_FTOA_BUFFER_SIZE))
			{
				buf = StringFunctions.ChangeCharacter(buf, len++, '0');
			}
		}
		if (len < DefineConstants.PRINTF_FTOA_BUFFER_SIZE)
		{
			if (negative)
			{
				buf = StringFunctions.ChangeCharacter(buf, len++, '-');
			}
			else if ((flags & (1 << 2))!=0)
			{
				buf = StringFunctions.ChangeCharacter(buf, len++, '+'); // ignore the space if the '+' exists
			}
			else if ((flags & (1 << 3))!=0)
			{
				buf = StringFunctions.ChangeCharacter(buf, len++, ' ');
			}
		}
		return _out_rev(@out,  buffer, idx, maxlen,(byte*)getBytePtr(Encoding.Default.GetBytes(buf)), len, width, flags);
	}
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on the parameter 'format', so pointers on this parameter are left unchanged:
	internal static int _fmt_vsnprintf(out_fct_type @out, sbyte* buffer, uint maxlen, sbyte* format, ref byte[] memBase, arg_list* arg)
	{
		uint flags;
		uint width;
		uint precision;
		uint n;
		uint idx = 0u;
		//string testStr = "%+*d";
		//if (buffer == 0)
		if (buffer == null)
		{
			@out = _out_null;
		}
        string s = String(format);
		if (GameStart.isPrint)
			print(s);
		while (*format != 0)
		{
			// 格式化标识  %[flags][width][.precision][length]
			//不是就继续
			if (*format != (sbyte)'%')
			{
				@out((char)*format, buffer, idx++, maxlen);
				format++;
				continue;
			}
			//遇到%先跳过%
			else
			{
				format++;
			}
			// 取falgs
			flags = 0u;
			do
			{
				switch ((char)format[0])
				{
					case '0':
						flags |= (1u << 0);
						format++;
						n = 1u;
						break;
					case '-':
						flags |= (1u << 1);
						format++;
						n = 1u;
						break;
					case '+':
						flags |= (1u << 2);
						format++;
						n = 1u;
						break;
					case ' ':
						flags |= (1u << 3);
						format++;
						n = 1u;
						break;
					case '#':
						flags |= (1u << 4);
						format++;
						n = 1u;
						break;
					default:
						n = 0u;
						break;
				}
			} while (n != 0);
			// 取width
			width = 0u;
			if (_is_digit(format[0]))
			{
				width = _atoi(String(format));
			}
			else if (format[0] == '*')
			{
				int w = (*(int*)arg_get_item((arg), sizeof(int)));
				if (w < 0)
				{
					flags |= (1u << 1);
					width = (uint)-w;
				}
				else
				{
					width = (uint)w;
				}
				format++;
			}
			// 取precision
			precision = 0u;
			if (format[0] == '.')
			{
				flags |= (1u << 10);
				format++;
				if (_is_digit(format[0]))
				{
					precision = _atoi(String(format));
				}
				else if (format[0] == '*')
				{
					int prec = (*(int*)arg_get_item((arg), sizeof(int)));
					precision = prec > 0 ? (uint)prec : 0u;
					format++;
				}
			}
			// 取length
			switch ((char)format[0])
			{
				case 'l':
					flags |= (1u << 8);
					format++;
					if (format[0] == 'l')
					{
						flags |= (1u << 9);
						format++;
					}
					break;
				case 'h':
					flags |= (1u << 7);
					format++;
					if (format[0] == 'h')
					{
						flags |= (1u << 6);
						format++;
					}
					break;
				case 't':
					//flags |= (sizeof(ptrdiff_t) == sizeof(int) ? (1u << 8) : (1u << 9));
					flags |= (sizeof(int) == sizeof(long) ? (1u << 8) : (1u << 9));
					format++;
					break;
				case 'j':
					flags |= (sizeof(long) == sizeof(int) ? (1u << 8) : (1u << 9));
					format++;
					break;
				case 'z':
					flags |= (sizeof(uint) == sizeof(int) ? (1u << 8) : (1u << 9));
					format++;
					break;
				default:
					break;
			}
			//处理fmt
			switch ((char)format[0])
			{
				case 'd':
				case 'i':
				case 'u':
				case 'x':
				case 'X':
				case 'o':
				case 'b':
					{
						uint @base;
						if (format[0] == 'x' || format[0] == 'X')
						{
							@base = 16u;
						}
						else if (format[0] == 'o')
						{
							@base = 8u;
						}
						else if (format[0] == 'b')
						{
							@base = 2u;
						}
						else
						{
							@base = 10u;
							flags &= ~(1u << 4);
						}
						if (format[0] == 'X')
						{
							flags |= (1u << 5);
						}
						if ((format[0] != (sbyte)'i') && (format[0] != 'd'))
						{
							flags &= ~((1u << 2) | (1u << 3));
						}
						if ((flags & (1u << 10)) != 0)
						{
							flags &= ~(1u << 0);
						}
						if ((format[0] == 'i') || (format[0] == 'd'))
						{
							// signed
							if ((flags & (1u << 9)) != 0)
							{
								long value = (*(long*)arg_get_item((arg), sizeof(long)));
								idx = _ntoa_long_long(@out, buffer, idx, maxlen, (ulong)(value > 0 ? value : 0 - value), value < 0, @base, precision, width, flags);
							}
							else if ((flags & (1u << 8)) != 0)
							{
								int value = (*(int*)arg_get_item((arg), sizeof(int)));
								idx = _ntoa_long(@out, buffer, idx, maxlen, (uint)(value > 0 ? value : 0 - value), value < 0, @base, precision, width, flags);
							}
							else
							{
								int value = ((flags & (1u << 6)) != 0) ? (*(int*)arg_get_item((arg), sizeof(int))) : ((flags & (1u << 7)) != 0) ? (*(int*)arg_get_item((arg), sizeof(int))) : (*(int*)arg_get_item((arg), sizeof(int)));
								idx = _ntoa_long(@out, buffer, idx, maxlen, (uint)(value > 0 ? value : 0 - value), value < 0, @base, precision, width, flags);
							}
						}
						else
						{
							// unsigned
							if ((flags & (1u << 9)) != 0)
							{
								idx = _ntoa_long_long(@out, buffer, idx, maxlen, (*(ulong*)arg_get_item((arg), sizeof(ulong))), false, @base, precision, width, flags);
							}
							else if ((flags & (1u << 8)) != 0)
							{
								idx = _ntoa_long(@out, buffer, idx, maxlen, (*(uint*)arg_get_item((arg), sizeof(uint))), false, @base, precision, width, flags);
							}
							else
							{
								uint value = ((flags & (1u << 6)) != 0) ? (*(uint*)arg_get_item((arg), sizeof(uint))) : ((flags & (1u << 7)) != 0) ? (*(uint*)arg_get_item((arg), sizeof(uint))) : ((uint)arg_get_item((arg), sizeof(uint)));
								idx = _ntoa_long(@out, buffer, idx, maxlen, value, false, @base, precision, width, flags);
							}
						}
						format++;
						break;
					}
				case 'f':
				case 'F':
					if (format[0] == 'F')
					{
						flags |= (1u << 5);
					}
					idx = _ftoa(@out, buffer, idx, maxlen, *((double*)arg_get_item((arg), sizeof(double))), precision, width, flags);
					format++;
					break;
				case 'e':
				case 'E':
				case 'g':
				case 'G':
					if ((format[0] == 'g') || (format[0] == 'G'))
					{
						flags |= (1u << 11);
					}
					if ((format[0] == 'E') || (format[0] == 'G'))
					{
						flags |= (1u << 5);
					}
					idx = _etoa(@out, buffer, idx, maxlen, *((double*)arg_get_item((arg), sizeof(double))), precision, width, flags);
					format++;
					break;
				case 'c':
					{
						uint l = 1U;
						if (((flags & (1u << 1)) == 0))
						{
							while (l++ < width)
							{
								@out(' ', buffer, idx++, maxlen);
							}
						}
						@out((char)(*((int*)arg_get_item((arg), sizeof(int)))), buffer, idx++, maxlen);
						// post padding
						if ((flags & (1u << 1)) != 0)
						{
							while (l++ < width)
							{
								@out(' ', buffer, idx++, maxlen);
							}
						}
						format++;
						break;
					}
				case 's':
					{
						uint sp = *((uint*)arg_get_item((arg), sizeof(uint)));
						//ORIGINAL LINE: sbyte *p = (sbyte *)(memBase + sp);
						sbyte* p = (sbyte*)(getBytePtr(memBase, sp));
						//uint l = _strnlen_s(ref p, precision != 0 ? precision : (uint)-1);
						uint l = _strnlen_s(p, precision != 0 ? precision : uint.MaxValue);
						if ((flags & (1u << 10)) != 0)
						{
							l = (l < precision ? l : precision);
						}
						if (((flags & (1u << 1)) == 0))
						{
							while (l++ < width)
							{
								@out(' ', buffer, idx++, maxlen);
							}
						}
						if(GameStart.isPrint)
                        {
							string str = String(p);
							print(str);
						}
						
						while ((*p != 0) && ((flags & (1u << 10)) == 0 || (precision--) != 0))
						{
							@out((char)*(p++), buffer, idx++, maxlen);
							p++;
							idx++;
						}

						if ((flags & (1u << 1)) != 0)
						{
							while (l++ < width)
							{
								@out(' ', buffer, idx++, maxlen);
							}
						}
						format++;
						break;
					}
				case 'p':
					{
						//width = Sizeof(object) * 2U;
						width = (uint)(sizeof(void*) * 2U);
						flags |= (1u << 0) | (1u << 5);
						bool is_ll = sizeof(ulong) == sizeof(long);
						if (is_ll)
						{
							idx = _ntoa_long_long(@out, buffer, idx, maxlen, (ulong)(*(ulong*)arg_get_item((arg), (uint)sizeof(void*))), false, 16U, precision, width, flags);
						}
						else
						{
							idx = _ntoa_long(@out, buffer, idx, maxlen, (uint)((ulong)(*(ulong*)arg_get_item((arg), (uint)sizeof(void*)))), false, 16U, precision, width, flags);
						}
						format++;
						break;
					}
				case '%':
					@out('%', buffer, idx++, maxlen);
					format++;
					break;
				default:
					@out((char)format[0], buffer, idx++, maxlen);
					format++;
					break;
			}
		}
		// termination
		@out((char)0, buffer, idx < maxlen  ? idx : maxlen - 1U, maxlen);
		// return written chars without terminating \0
		return (int)idx;
	}
	public static int snprintf_(sbyte* buffer, uint count, sbyte* format, ref byte[] memBase, arg_list* arg)
	{
		return _fmt_vsnprintf(_out_buffer, buffer, count, format, ref memBase, arg);
	}
	/*
	初始化字体，提供外部访问，可以在程序启动之前初始化字体
	初始化之后字体信息会被存放在虚拟机中，在虚拟机销毁时一并销毁
	参数：
		vm		虚拟机
	*/
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int font_init(vm_info_st vm);
	/*
	释放字体
	*/
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//void font_free(vm_info_st vm);
	/*
	获取文字的位图信息，这个位图信息的地址是固定的，也就是font_info_t.bitmapBuffer的地址
	参数：
		vm		虚拟机
		ch		Unicode字符
	*/
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: C# has no equivalent to methods returning pointers to value types:
//ORIGINAL LINE: byte *font_get_bitmap(struct vm_info_st *vm, ushort ch);
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//byte font_get_bitmap(vm_info_st vm, ushort ch);
	/*
	获取字符宽度，字符的高度和字体大小一致
	参数：
		vm		虚拟机
		ch		Unicode字符
	*/
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int font_ch_width(vm_info_st vm, ushort ch);
	/*
	获取文本宽度，高度和字体高度一致
	参数：
		vm		虚拟机
		str		Unicode字符串
	*/
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int font_text_width(vm_info_st vm, ref ushort str);
	/*
	绘制字符
	参数：
		x 	横坐标
		y	纵坐标
		ch	Unicode字符
	*/
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int font_ch_draw(vm_info_st vm, int x, int y, ushort ch, ushort color);
	
	//ORIGINAL LINE: #define vm_mem_offset(addr) ((uint8 *)(addr) - (uint8 *)(vm->cpu->mem->buffer))
	
	//ORIGINAL LINE: #define vm_mem_buf (vm->cpu->mem->buffer)
	
	//ORIGINAL LINE: #define vmreg(i) (vm->cpu->registers[i])
	
	//ORIGINAL LINE: #define vmstack(i) (*((uint32 *)(vm_mem_buf + vmreg(r_sp)) + i))
	
	//ORIGINAL LINE: #define MR_SPRITE_INDEX_MASK (0x03FF)
	
	//ORIGINAL LINE: #define MR_SPRITE_TRANSPARENT (0x0400)
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on the parameter 'bitmap', so pointers on this parameter are left unchanged:
	public static bool bitmap_has_bit(byte* bitmap, uint n)
	{
        bitmap += n / 8;
        return ((0x80 >> ((int)(n % 8))) & *bitmap) != 0;
  //      byte b= bitmap [ n / 8];
		//return ((0x80 >> (int)(n % 8)) & b) != 0;
	}
	public static uint font_init(vm_info_st vm)
	{
		if (vm.mem->font.buf != 0)
		{
			return DefineConstants.MR_SUCCESS;
		}
		//字体名称
		//sbyte[] fontfile = new sbyte[DefineConstants.MAX_FILE_PATH_LEN];
		string fontfile = "";
		sbyte* f = (vm.mem->mr_state).sysinfo.sdcard_dir;
		{
			sbyte* f2 = (vm.mem->mr_state).sysinfo.dsm_dir;
				fontfile = string.Format("{0}/{1}/system/gb16.uc2", String(f), String(f2));
		}
		//文件长度
		stat s = new stat();
        int ret = Stat(fontfile, s);
        if (ret != 0)
        {
            return DefineConstants.MR_FAILED;
        }
        //打开文件
        UnityEngine.Debug.LogWarning("open font File: " + fontfile);
        FILE fd = fopen(fontfile, "rb");
		if (fd == null)
		{
			return DefineConstants.MR_FAILED;
		}
		//读取字体内容
		//ORIGINAL LINE: byte *buf = (byte *)malloc(s.st_size);
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
		font_buf_m = malloc(s.st_size);
		byte* buf = (byte*)getBytePtr(font_buf_m, 0);
		if (s.st_size != fread(font_buf_m, 1, (int)s.st_size, fd))
		{
			fclose(fd);
			return DefineConstants.MR_FAILED;
		}
        font_buf = buf;
        vm.mem->font.buf =1;
		vm.mem->font.size = 16;
		vm.mem->font.len = s.st_size;
		vm.mem->font.chlen = 32; //(size * size) / 8;
		fclose(fd);
		return DefineConstants.MR_SUCCESS;
	}
	public static void font_free(vm_info_st vm)
	{
		if (vm.mem->font.buf == 0)
		{
			return;
		}
		free(vm.mem->font.buf);
	}
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: C# has no equivalent to methods returning pointers to value types:
//ORIGINAL LINE: byte *font_get_bitmap(vm_info_st *vm, ushort ch)
	public unsafe static byte* font_get_bitmap(vm_info_st vm, int ch)
	{
		//取得点阵
		//return memcpy(vm.mem->font.bitmapBuf, vm.mem->font.buf + vm.mem->font.chlen * ch, vm.mem->font.chlen);
		byte* f = vm.mem->font.bitmapBuf;
		byte* buf = font_buf;
		uint index = (uint)(vm.mem->font.chlen * ch);
		if(index+ vm.mem->font.chlen >= vm.mem->font.len)
        {

        }
		if(ch== 23383)
        {

        }
		// return memcpy(f, (byte*)vm.mem->font.buf, (uint)(vm.mem->font.chlen * ch), vm.mem->font.chlen);
		return memcpy(f, buf , index, vm.mem->font.chlen);
	}
	public static uint font_ch_width(vm_info_st vm, int ch)
	{
		//普通ASCII字符
		if (ch < 0x80)
		{
			return vm.mem->font.size >> 1; //宽度=字体大小/2
		}
		//其他字符
		return vm.mem->font.size;
	}
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on the parameter 'str', so pointers on this parameter are left unchanged:
	public unsafe static uint font_text_width(vm_info_st vm, ushort * str)
	{
		//逐个取长度并相加
		uint len = 0;
		while (*str != 0)
		{
			len += (ushort)font_ch_width(vm, *(str++));
		}
		return len;
	}
	public unsafe static void font_ch_draw(vm_info_st vm, uint x, uint y, ushort ch, ushort color)
	{
//ORIGINAL LINE: byte *bmp = font_get_bitmap(vm, ch);
		byte* bmp = font_get_bitmap(vm, ch);
		uint fw = font_ch_width(vm, ch);
		for (uint dy = 0; dy < vm.mem->font.size; dy++)
		{
			for (uint dx = 0; dx < fw; dx++)
			{
				if (!bitmap_has_bit(bmp, dy * vm.mem->font.size + dx))
				{
					continue;
				}
				//*(vm.mem->video + (dy + y) * (vm.mem->mr_state).sysinfo.screen_width + (dx + x)) = color;
				vm.mem->video [(dy + y) * (vm.mem->mr_state).sysinfo.screen_width + (dx + x)]= color;
			}
		}
	}
    //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: C# has no equivalent to methods returning pointers to value types:
    //ORIGINAL LINE: ushort* mr_c2u(sbyte* cp, int* err, int* size)
    public static ushort* mr_c2u(byte* cp, ref int err, ref uint size)
    {
        //byte[] ucp = (byte)cp;
        //ORIGINAL LINE: const byte *pReturn;
        byte* pReturn;
        uint uniSize;
        uint chCount;
        int i;
        if (0 != err)
        {
            err = -1;
        }
        chCount = 0;
        for (i = 0; 0 != cp[i]; i++)
        {
            if (cp[i] >= 0xa1 && cp[i] <= 0xfe && 0 != cp[i + 1])
            {
                i++;
            }
            chCount++;
        }
        uniSize = 2 * chCount + 2;
        if (0 != size)
        {
            size = uniSize;
        }
        //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
        ushort* uniBuf = (ushort*)getBytePtr(malloc(uniSize));
        if (null != uniBuf)
        {
            chCount = 0;
            i = 0;
            while (0 != cp[i])
            {
                if (cp[i] < 0x80)
                {
                    uniBuf[chCount++] = (ushort)(cp[i] << 8);
                    i++;
                }
                else
                {
                    pReturn = GBCodeToUnicode(cp + i);
                    if (null != pReturn)
                    {
                        uniBuf[chCount++] = (ushort)((pReturn[0] << 8) + pReturn[1]);
                    }
                    else
                    {
                        //if (null != err)
                        //{
                        //    err = i;
                        //    free(uniBuf);
                        //    uniBuf = null;
                        //    goto end;
                        //}
                        //else
                        //{
                        //}
                        uniBuf[chCount++] = 0x3000;
                    }
                    i += 2;
                }
            }
            uniBuf[chCount] = 0;
        }
        end:
        return uniBuf;
    }
    /*
	 * 整理路径，将分隔符统一为sep，并清除连续的多个
	 *
	 * 参数：路径(必须可读写)
	 */
    public static string FormatPathString(ref string path, sbyte sep)
	{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged:
//		sbyte * p;
////C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged:
//		sbyte * q;
//		int flag = 0;
//		if (path == null)
//		{
//			return null;
//		}
//		for (p = q = &(path[0]); '\0' != *p; p++)
//		{
//			if ('\\' == *p || '/' == *p)
//			{
//				if (0 == flag)
//				{
//					*q++= sep;
//				}
//				flag = 1;
//			}
//			else
//			{
//				*q++= *p;
//				flag = 0;
//			}
//		}
//		*q = (sbyte)'\0';
		return path;
	}
	// 由相对路径的文件名接成绝对路径名
	public static string get_filename(vm_info_st vm, ref string outputbuf, ref string filename)
	{
		//sbyte[] dsmFullPath = new sbyte[DefineConstants.MAX_FILE_PATH_LEN + 1];
		string dsmFullPath = "";
		//snprintf(dsmFullPath, sizeof(sbyte), "%s%s%s", vm.mem->mr_state.sysinfo.sdcard_dir, vm.mem->mr_state.sysinfo.dsm_dir, filename);
		sbyte* f = (vm.mem->mr_state).sysinfo.sdcard_dir;
		{
			sbyte* f2 = (vm.mem->mr_state).sysinfo.dsm_dir;
				snprintf(ref dsmFullPath, "%s%s%s",String( f), String(f2), filename);
		}
		//FormatPathString(dsmFullPath);
		//GBToUTF8String( dsmFullPath, ref outputbuf, DefineConstants.MAX_FILE_PATH_LEN);
		outputbuf = dsmFullPath;
		return outputbuf;
	}
	public static FILE open_file(vm_info_st vm, ref string filename, string mode)
	{
		//sbyte[] fullpathname = new sbyte[DefineConstants.MAX_FILE_PATH_LEN];
		string fullpathname = "";
		get_filename(vm, ref fullpathname, ref filename);
		logi("open file %s", fullpathname);
		return fopen(fullpathname, mode);
	}
	/*
	打开一个mrp文件
	参数:
		filename		文件名
	*/
	public unsafe static mrp_reader_t mrp_open(string filename)
	{
		
		Console.Write("mrp_open(filename={0})", filename);
        if (reader != null)
        {
            if(mrp_file(reader,ref filename)!=null)
            return reader;
        }
            //打开文件
        FILE fd = fopen(filename, "rb");
		if (fd == null)
		{
			loge("mrp_open failed when open file");
			return null;
		}
		//读取头
		mrp_head_info head = new mrp_head_info();
		//if (sizeof(mrp_head_info) != fread(head, 1, sizeof(mrp_head_info), fd))
		if (GetSize(head) != fread(out head, 1,(int) GetSize(head), fd))
	    {
			loge("mrp_open failed when read head");
			fclose(fd);
			return null;
		}
		//创建读取器
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
		//mrp_reader_t reader = (mrp_reader_t)malloc(sizeof(mrp_reader_t));
	     reader = new  mrp_reader_t();
		if (reader == null)
		{
			loge("mrp_open failed when alloc reader");
			fclose(fd);
			return null;
		}
        //初始化mrp信息
        reader.info.name = String(head.name, 12);
        reader.info.showName = String(head.showName, 24);
        reader.info.author = String(head.author, 40);
        reader.info.desc = String(head.desc, 64);
        reader.info.version = head.version;
		reader.info.appid = head.appid;
		reader.info.ver = ((head.ver << 24) | ((head.ver & 0x0000FF00) << 8) | ((head.ver & 0x00FF0000) >> 8) | (head.ver >> 24));
		reader.info.id = ((head.id << 24) | ((head.id & 0x0000FF00) << 8) | ((head.id & 0x00FF0000) >> 8) | (head.id >> 24));
		//其他值
		reader.data_offset = head.data_offset;
		reader.list_offset = head.list_offset;
		//文件
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: reader->fd = fd;
		reader.fd = fd;
		//返回去
		return reader;
	}
	/*
	关闭mrp
	参数：
		reader		读取器
	*/
	public static void mrp_close(mrp_reader_t reader)
	{
		if (reader != null)
		{
			
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
//ORIGINAL LINE: printf("mrp_close(reader=%p)",__VA_ARGS__);
			Console.Write("mrp_close(reader=%p)",__VA_ARGS__);
			
			if (reader.fd != null)
			{
				fclose(reader.fd);
			}
			free(reader);
		}
	}
	/*
	加载文件列表，如果已经加载则直接略过
	参数：
		reader		读取器
	*/
	public static void mrp_load_files(mrp_reader_t reader)
	{
		//避免重复加载
		if (reader.file_len > 0)
		{
			return;
		}
		
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
//ORIGINAL LINE: printf("mrp_load_files(reader=%p)",__VA_ARGS__);
		Console.Write("mrp_load_files(reader=%p)",__VA_ARGS__);
		
		//逐个加载文件
		for (uint i = 0, offset = reader.list_offset; i < DefineConstants.MRP_MAX_INNEER_FILE; i++)
		{
			uint nameLen=0;
			uint fileOffset=0;
			uint fileSize=0;
			//sbyte[] nameBuffer = new sbyte[DefineConstants.MRP_MAX_INNEER_NAME_LEN];
			string nameBuffer = "";
			//读取文件名长度
			fseek(reader.fd, offset, SEEK_SET);
			fread(out nameLen, 1, 4, reader.fd);
			offset += 4;
			//读取文件名
			fseek(reader.fd, offset, SEEK_SET);
			fread(out nameBuffer, 1, (int)((nameLen) > (DefineConstants.MRP_MAX_INNEER_NAME_LEN) ? (DefineConstants.MRP_MAX_INNEER_NAME_LEN) : (nameLen)) - 1, reader.fd); //这里读取长度-1是为了保留一个\0
			offset += nameLen;
			//读取偏移
			fseek(reader.fd, offset, SEEK_SET);
			fread(out fileOffset, 1, 4, reader.fd);
			offset += 4;
			//读取文件大小
			fseek(reader.fd, offset, SEEK_SET);
			fread(out fileSize, 1, 4, reader.fd);
			offset += 8; //最后还有4个空字节，所以+8
			//读取gzip识别字段
			ushort gzipCode = 0; //是不是[0]=1f,[2]=8b
			fseek(reader.fd, fileOffset, SEEK_SET);
			fread(out gzipCode, 1, 2, reader.fd);
			//保存
			reader.files[i].name = nameBuffer.Replace(" ","");
			reader.files[i].offset = fileOffset;
			reader.files[i].size = fileSize;
			reader.files[i].isgzip = (gzipCode == 0x8b1f);
			reader.file_len++; //自增
			//检测是否读取完（也就是读取到数据区域了,注意的是数据区域需要+8）
			if (offset >= reader.data_offset + 8)
			{
				break;
			}
		}
	}
	/*
	获取内部mrp文件信息
	参数：
		reader		读取器
		filename	文件名称
	返回：
		文件信息，如果文件不存在则返回null
	*/
	public static mrp_file_info mrp_file(mrp_reader_t reader,ref string filename)
	{
		
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
//ORIGINAL LINE: printf("mrp_file(reader=%p, filename=%s)",__VA_ARGS__);
		Console.Write("mrp_file(reader=%p, filename={0})", filename);
		
		mrp_load_files(reader); //不管怎样先加载一次吧
		for (uint i = 0; i < reader.file_len; i++)
		{
			if (string.Compare(filename, reader.files[i].name) == 0)
			{
				return reader.files[i];
			}
		}
		return null;
	}
	/*
	读取mrp内部文件
	参数：
		reader			读取器
		filename		内部文件名
		buffer			存放的位置
	返回：
		0		读取成功
		-1		读取失败
	*/
	public static int mrp_read(mrp_reader_t reader, ref string filename, ref byte[] buffer)
	{
		
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
//ORIGINAL LINE: printf("mrp_read(reader=%p, filename=%s, buffer=%p)",__VA_ARGS__);
		Console.Write("mrp_read(reader=%p, filename={0}, buffer=%p)", filename);
		
		mrp_file_info info = mrp_file(reader, ref filename); //取得文件
		if (info == null)
		{
			return -1;
		}
		//读取
		fseek(reader.fd, info.offset, SEEK_SET);
        buffer = malloc(info.size);
        uint addr = mem_malloc(vm, info.size);
        mem_free(vm, addr, info.size);

        uint readed =fread(buffer, 1, (int)info.size, reader.fd);
		if (info.size != readed)
		{
			return -1;
		}
		//返回
		return 0;
	}
	//这个宏用来从某个地址处的空闲链表指针
	
	//ORIGINAL LINE: #define p_llist(addr) ((mr_free_mem_st *)(vm_mem_buf + (addr)))
	//这个宏用来取得内存状态
	
	//ORIGINAL LINE: #define memst (vm.mem->mr_state.mem_state)
	//public static mr_state_t mr_state;
	
	public static void mem_init(vm_info_st vm)
	{
		logi("mem_init(vm=%p)", vm);
		//mr_state = vm.mem->mr_state;
		long num = DefineConstants.VM_MEM_OFFSET + sizeof(vm_mem_map_st);
		uint size = (uint)((num + 3) & 0xfffffffc) ;
		uint @base = vm.mem->mr_state.mem_state.@base = size;
		
		//uint len = vm.mem->mr_state.mem_state.len = vm.cpu.mem.memSize & 0xfffffffc;
		uint len = vm.mem->mr_state.mem_state.len = (vm.cpu.mem.memSize - @base) & 0xfffffffc;
        vm.mem->mr_state.mem_state.end = @base + len;
		//将整个内存初始化成空闲块，作为第一个空闲块
		mr_free_mem_st* head = ((mr_free_mem_st*)(vm_mem_buf + (@base)));
		
		head->next = len;
		head->size = len;
		
		//指向了第一个空闲块
		(vm.mem->mr_state.mem_state).free.size = 0;
		(vm.mem->mr_state.mem_state).free.next = 0;
		(vm.mem->mr_state.mem_state).left = len; //剩余量当然就是所有内存了
		(vm.mem->mr_state.mem_state).min = len; //底值也是一样，开始是最大内存，随着分配将会逐渐减少
		(vm.mem->mr_state.mem_state).top = 0; //峰值的话与底值相反啦。
	}
   
    public static uint mem_malloc(vm_info_st vm, int len)
    {
		return mem_malloc(vm,(uint)len);
	}
	public static uint mem_malloc(vm_info_st vm, uint len)
	{
		FindNum = 0;
		logi("mem_malloc(vm=%p, len=%d)", vm, len);
		
		if(len>= 614404)
        {
			//len = 24;
		}
		
		//先检测一下给定的参数是否正确
		if (len <= 0)
		{
			return 0;
		}
		//检测一下内存是否正确
		if ((vm.mem->mr_state.mem_state).@base + (vm.mem->mr_state.mem_state).free.size > (vm.mem->mr_state.mem_state).end)
		{
			UnityEngine.Debug.LogError("mem_malloc is error\n");
			return 0;
		}
		len = Math.Max(len, DefineConstants. MEM_MIN_PIECE_SIZE); //要求分配的内存不能小于最小碎片值，以免产生无法利用的碎片
		len = (len + 7) & 0xfffffff8; //内存对齐
		//检测一下剩余空间是否足够
		if (len > (vm.mem->mr_state.mem_state).left)
		{
			UnityEngine.Debug.LogError("mem_malloc no memory\n");
			return 0;
		}
		//查找内存链表，找到合适的内存块
		//mr_free_mem_st* prevS =
		{
			mr_free_mem_st* prev = &vm.mem->mr_state.mem_state.free; //上一块
		    mr_free_mem_st* next = ((mr_free_mem_st*)(vm_mem_buf + ((vm.mem->mr_state.mem_state).@base + prev->next))); //下一块
			mr_free_mem_st* end = (mr_free_mem_st*)(vm_mem_buf + ((vm.mem->mr_state.mem_state).end)); //结束位置
                                                                                                              //Insert(end, vm.cpu.mem.buffer,(vm.mem->mr_state.mem_state).end);
            try
            {                                                                                //查找可用内存直到全部找完
                while (next < end)
                {
                    //找到了合适的块
                    if (next->size >= len)
                    {
                        (vm.mem->mr_state.mem_state).left -= len; //剩余内存减小
                                                                  //如果找到的空闲块比所需的块大得多了，那么对空闲块进行拆分
                        if (next->size - len > DefineConstants. MEM_MIN_PIECE_SIZE)
                        {
                            //处理截断后的内存
                           
                            mr_free_mem_st* cut = (mr_free_mem_st*)((byte*)next + len);
                            cut->next = next->next;
                            cut->size = next->size - len;
                            //把截断后的前面一块从空闲链表中移除
                            //prev->next = vm_mem_offset(cut) - (vm.mem->mr_state.mem_state).@base;
                            prev->next += len;
                        }
                        //大得不多的话，直接就全部给分配了。
                        else
                        {
                            prev->next = next->next; //把当前块从空闲链表中去除
                        }
                        //计算一下峰值和底值
                        (vm.mem->mr_state.mem_state).top = Math.Max((vm.mem->mr_state.mem_state).top, prev->next);
                        (vm.mem->mr_state.mem_state).min = Math.Min((vm.mem->mr_state.mem_state).min, (vm.mem->mr_state.mem_state).left);
						uint ret = vm_mem_offset(next);
						if (GameStart.isPrint)
							UnityEngine.Debug.LogWarning( string .Format("mem_malloc len:={0}   addr:0x{1:x8}  addrIndex:{2}" ,len,ret,ret));
						//把空闲块返回出去
						return ret;
                    }
                    else
                    {
						FindNum++;
                        if (FindNum > 1000000)
                        {
                            UnityEngine.Debug.LogError("FindNum Max! ");
                            break;
                        }
                    }
                    //继续
                    //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
                    //ORIGINAL LINE: prev = next;
                    prev = next;
                    next = ((mr_free_mem_st*)(vm_mem_buf + ((vm.mem->mr_state.mem_state).@base + next->next)));

                    //if (next->size-len ==  MEM_MIN_PIECE_SIZE)
                    //{
                    //    prev->next = next->next;
                    //    vm.mem->mr_state.mem_state.left -= len;
                    //    if (vm.mem->mr_state.mem_state.left < vm.mem->mr_state.mem_state.min)
                    //        vm.mem->mr_state.mem_state.min = vm.mem->mr_state.mem_state.left;
                    //    if (vm.mem->mr_state.mem_state.top < prev->next)
                    //        vm.mem->mr_state.mem_state.top = prev->next;
                    //    return vm_mem_offset(next);
                    //}

                    //if (next->size-len >  MEM_MIN_PIECE_SIZE)
                    //{
                    //    mr_free_mem_st* l = (mr_free_mem_st*)((byte*)next + len);
                    //    l->next = next->next;
                    //    l->size = next->size - len;
                    //    prev->next += len;
                    //    vm.mem->mr_state.mem_state.left -= len;

                    //    if (vm.mem->mr_state.mem_state.left < vm.mem->mr_state.mem_state.min)
                    //        vm.mem->mr_state.mem_state.min = vm.mem->mr_state.mem_state.left;
                    //    if (vm.mem->mr_state.mem_state.top < prev->next)
                    //        vm.mem->mr_state.mem_state.top = prev->next;
                    //    return vm_mem_offset(next);
                    //}
                    //prev = next;
                    //next = ((mr_free_mem_st*)(vm_mem_buf + (vm.mem->mr_state.mem_state.@base + next->next)));
                }
                UnityEngine.Debug.LogError("my_malloc no memory " );
            }
            catch(Exception e)
            {
                UnityEngine.Debug.LogError("mem_malloc error! "+e);
            }
		}
		//如果一直没有找到则分配失败
		return 0;
	}

    static int FindNum;


	public static void mem_free(vm_info_st vm, uint addr, uint len)
	{
		//检测参数是否正确
		if (len <= 0 || addr < (vm.mem->mr_state.mem_state).@base || addr >= (vm.mem->mr_state.mem_state).end)
		{
			return;
		}
		len = Math.Max(len, DefineConstants.MEM_MIN_PIECE_SIZE); //不能小于最小的碎片长度
		len = (len + 7) & 0xfffffff8; //对齐一下
		logi("mem_free(vm=%p, addr=0x%08x, len=%d)", vm, addr, len);
		//检测是否超过了内存空间
		if (addr + len > (vm.mem->mr_state.mem_state).end )
		{
			return;
		}
        mr_free_mem_st* end = (mr_free_mem_st*)(vm_mem_buf + ((vm.mem->mr_state.mem_state).end));
        //检测一下要释放的内存块的前面有没有空闲的内存块，因为如果前面一块如果空闲的话，就应该和当前释放掉的块合并成一块空闲块。
        mr_free_mem_st* free = &((vm.mem->mr_state.mem_state).free);
		mr_free_mem_st* next = ((mr_free_mem_st*)(vm_mem_buf + ((vm.mem->mr_state.mem_state).@base + free->next)));
		mr_free_mem_st* curr = ((mr_free_mem_st*)(vm_mem_buf + (addr))); //要释放的块
        

        while (next < end && next < curr)
		{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: C# does not have an equivalent to pointers to variables (in C#, the variable no longer points to the original when the original variable is re-assigned):
//ORIGINAL LINE: free = next;
			free = next;
			next = ((mr_free_mem_st*)(vm_mem_buf + ((vm.mem->mr_state.mem_state).@base + next->next)));
		}
		//如果当前要释放的内存块是一个空闲块则不处理
		if ((curr == free) || (curr == next))
		{
			return;
		}
        mr_free_mem_st* LG_mem_base=(mr_free_mem_st*)(vm_mem_buf + (vm.mem->mr_state.mem_state).@base);
        //如果前面一块正好和这块内存相邻则合并
        mr_free_mem_st* mr_free = &(vm.mem->mr_state.mem_state.free);
        {
			if ((free != mr_free) && ((byte*)(free) + free->size == (byte*)curr))
			{
				free->size += len;
			}
			//如果不相邻的话则将当前块插入到链表中
			else
			{
                //curr->next = free->next;
                curr->next = vm_mem_offset(next) - (vm.mem->mr_state.mem_state).@base;
                curr->size = len;
                free->next = vm_mem_offset(curr) - (vm.mem->mr_state.mem_state).@base;
                next2 = ((mr_free_mem_st*)(vm_mem_buf + ((vm.mem->mr_state.mem_state).@base + free->next)));

                //free->next = (uint)((byte*)curr - (byte*)LG_mem_base);
                //free = curr;
                //free->next = (uint)((byte*)next - (byte*)LG_mem_base);
                //if (len <=  free->size)
                //{

                //}
                //free->size = len;
                
            }
            //完成后再看看是否和后面一块相邻，如果相邻的话进行合并
            if ((free->next < (vm.mem->mr_state.mem_state).end) && (free->next == addr + len - (vm.mem->mr_state.mem_state).@base))
            //  if ((next < end) && (byte*)next == ((byte*)curr + len))
            {
                curr->next = next->next;
                curr->size += next->size;

                //free->next = next->next;
                //free->size += next->size;
            }
		}
		//释放后恢复长度
		(vm.mem->mr_state.mem_state).left += len;
	}

    static mr_free_mem_st* next2;

    //ORIGINAL LINE: #define logsysc(fmt, ...) printf("[SYSCAL] "); println(fmt, ##__VA_ARGS__)

    //ORIGINAL LINE: #define mr_ret(val) (vm->cpu->registers[0] = (val))

    //ORIGINAL LINE: #define vm.mem->mr_state (vm->mem->mr_state)

    //ORIGINAL LINE: #define vm_mem_offset(addr) ((uint8 *)(addr) - (uint8 *)(vm->cpu->mem->buffer))

    //ORIGINAL LINE: #define vm_mem_buf (vm->cpu->mem->buffer)

    //ORIGINAL LINE: #define vmreg(i) (vm->cpu->registers[i])

    //ORIGINAL LINE: #define vmstack(i) (*((uint32 *)(vm_mem_buf + vmreg(r_sp)) + i))

    //ORIGINAL LINE: #define MR_SPRITE_INDEX_MASK (0x03FF)

    //ORIGINAL LINE: #define MR_SPRITE_TRANSPARENT (0x0400)
    //中断处理程序
    public static void handle_interapt(vm_info_st vm, uint nu)
	{
		//TODO 暂时这样吧，先用着，等基本完善了再处理成字典。
		//处理中断号
		switch (nu)
		{
			case DefineConstants.SWI_MR_MALLOC:
				swi_mr_malloc(vm);
				break;
			case DefineConstants.SWI_MR_FREE:
				swi_mr_free(vm);
				break;
			case DefineConstants.SWI_MR_REALLOC:
				swi_mr_realloc(vm);
				break;
			case DefineConstants.SWI_MR_MEMCPY:
				swi_mr_memcpy(vm);
				break;
			case DefineConstants.SWI_MR_MEMMOVE:
				swi_mr_memmove(vm); break;
			case DefineConstants.SWI_MR_STRCPY:
				swi_mr_strcpy(vm); break;
			case DefineConstants.SWI_MR_STRNCPY:
				swi_mr_strncpy(vm); break;
			case DefineConstants.SWI_MR_STRCAT:
				swi_mr_strcat(vm); break;
			case DefineConstants.SWI_MR_STRNCAT:
				swi_mr_strncat(vm); break;
			case DefineConstants.SWI_MR_MEMCMP:
				swi_mr_memcmp(vm); break;
			case DefineConstants.SWI_MR_STRCMP:
				swi_mr_strcmp(vm); break;
			case DefineConstants.SWI_MR_STRNCMP:
				swi_mr_strncmp(vm); break;
			case DefineConstants.SWI_MR_STRCOLL:
				swi_mr_strcoll(vm); break;
			case DefineConstants.SWI_MR_MEMCHR:
				swi_mr_memchr(vm); break;
			case DefineConstants.SWI_MR_MEMSET:
				swi_mr_memset(vm); break;
			case DefineConstants.SWI_MR_STRLEN:
				swi_mr_strlen(vm); break;
			case DefineConstants.SWI_MR_STRSTR:
				swi_mr_strstr(vm); break;
			case DefineConstants.SWI_MR_SPRINTF:
				swi_mr_sprintf(vm); break;
			case DefineConstants.SWI_MR_ATOI:
				swi_mr_atoi(vm); break;
			case DefineConstants.SWI_MR_STRTOUL:
				swi_mr_strtoul(vm); break;
			case DefineConstants.SWI_MR_RAND:
				swi_mr_rand(vm); break;
			case DefineConstants.SWI_MR_FERRNO:
				swi_mr_ferrno(vm); break;
			case DefineConstants.SWI_MR_OPEN:
				swi_mr_open(vm); break;
			case DefineConstants.SWI_MR_CLOSE:
				swi_mr_close(vm); break;
			case DefineConstants.SWI_MR_INFO:
				swi_mr_info(vm); break;
			case DefineConstants.SWI_MR_WRITE:
				swi_mr_write(vm); break;
			case DefineConstants.SWI_MR_READ:
				swi_mr_read(vm); break;
			case DefineConstants.SWI_MR_SEEK:
				swi_mr_seek(vm); break;
			case DefineConstants.SWI_MR_GETLEN:
				swi_mr_getLen(vm); break;
			case DefineConstants.SWI_MR_REMOVE:
				swi_mr_remove(vm); break;
			case DefineConstants.SWI_MR_RENAME:
				swi_mr_rename(vm); break;
			case DefineConstants.SWI_MR_MKDIR:
				swi_mr_mkDir(vm); break;
			case DefineConstants.SWI_MR_RMDIR:
				swi_mr_rmDir(vm); break;
			case DefineConstants.SWI_MR_FINDSTART:
				swi_mr_findStart(vm); break;
			case DefineConstants.SWI_MR_FINDGETNEXT:
				swi_mr_findGetNext(vm); break;
			case DefineConstants.SWI_MR_FINDSTOP:
				swi_mr_findStop(vm); break;
			case DefineConstants.SWI_MR_READFILE:
				swi_mr_readFile(vm); break;
			case DefineConstants.SWI_MR_PRINTF:
				swi_mr_printf(vm); break;
			case DefineConstants.SWI_MR_WSTRLEN:
				swi_mr_wstrlen(vm); break;
			case DefineConstants.SWI_MR_DRAWPOINT:
				swi_mr_drawPoint(vm); break;
			case DefineConstants.SWI_MR_REFRESHBUFFER:
				swi_mr_refreshBuffer(vm); break;
			case DefineConstants.SWI_MR_DRAWRECT:
				swi_mr_drawRect(vm); break;
			case DefineConstants.SWI_MR_DRAWTEXT:
				swi_mr_drawText(vm); break;
			case DefineConstants.SWI_MR_DRAWTEXTEX:
				swi_mr_drawTextEx(vm); break;
			case DefineConstants.SWI_MR_GETCHARBITMAP:
				swi_mr_getCharBitmap(vm); break;
			case DefineConstants.SWI_MR_TIMERSTART:
				swi_mr_timeStart(vm); break;
			case DefineConstants.SWI_MR_TIMERSTOP:
				swi_mr_timeStop(vm); break;
			case DefineConstants.SWI_MR_GETTIME:
				swi_mr_getTime(vm); break;
			case DefineConstants.SWI_MR_GETDATETIME:
				swi_mr_getDateTime(vm); break;
			case DefineConstants.SWI_MR_PLATDRAWCHAR:
				swi_mr_platDrawChar(vm); break;
			case DefineConstants.SWI_MR_DRAWBITMAP:
				swi_mr_drawBitmap(vm); break;
			case DefineConstants.SWI_MR_MENUCREATE:
				swi_mr_menuCreate(vm); break;
			case DefineConstants.SWI_MR_MENUSETITEM:
				swi_mr_menuSetItem(vm); break;
			case DefineConstants.SWI_MR_MENUSHOW:
				swi_mr_menuShow(vm); break;
			case DefineConstants.SWI_MR_MENUSETFOCUS:
				swi_mr_menuSetFocus(vm); break;
			case DefineConstants.SWI_MR_MENURELEASE:
				swi_mr_menuRelease(vm); break;
			case DefineConstants.SWI_MR_MENUREFRESH:
				swi_mr_menuRefresh(vm); break;
			case DefineConstants.SWI_MR_DIALOGCREATE:
				swi_mr_dialogCreate(vm); break;
			case DefineConstants.SWI_MR_DIALOGRELEASE:
				swi_mr_dialogRelease(vm); break;
			case DefineConstants.SWI_MR_DIALOGREFRESH:
				swi_mr_dialogRefresh(vm); break;
			case DefineConstants.SWI_MR_TEXTCREATE:
				swi_mr_textCreate(vm); break;
			case DefineConstants.SWI_MR_TEXTRELEASE:
				swi_mr_textRelease(vm); break;
			case DefineConstants.SWI_MR_TEXTREFRESH:
				swi_mr_textRefresh(vm); break;
			case DefineConstants.SWI_MR_EDITCREATE:
				swi_mr_editCreate(vm); break;
			case DefineConstants.SWI_MR_EDITRELEASE:
				swi_mr_editRelease(vm); break;
			case DefineConstants.SWI_MR_EDITGETTEXT:
				swi_mr_editGetText(vm); break;
			case DefineConstants.SWI_MR_WINCREATE:
				swi_mr_winCreate(vm); break;
			case DefineConstants.SWI_MR_WINRELEASE:
				swi_mr_winRelease(vm); break;
			case DefineConstants.SWI_MR_GETSCREENINFO:
				swi_mr_getScreenInfo(vm); break;
			case DefineConstants.SWI_MR_C_FUNCTION_NEW:
				swi_mr_c_function_new(vm); break;
			case DefineConstants.SWI_MR_DIV:
				swi_mr_div(vm); break;
			case DefineConstants.SWI_MR_MOD:
				swi_mr_mod(vm); break;
			//平台的一些调用
			case DefineConstants.SWI_MR_TESTCOM:
				swi_mr_testcom(vm);
				break;
			case DefineConstants.SWI_MR_TESTCOM1:
				swi_mr_testcom1(vm);
				break;
			case DefineConstants.SWI_MR_PLAT:
				PLAT();
				break;
			case DefineConstants.SWI_MR_PLATEX:
				PLATEX();
				break;
			case DefineConstants.SWI_MR_UNZIP:
				print("UNZIP");
				break;
			case DefineConstants.SWI_MR_MD5_APPEND:
			case DefineConstants.SWI_MR_MD5_INIT:
			case DefineConstants.SWI_MR_MD5_FINISH:
				//vm.cpu.registers[0] = 1;
				break;
			case DefineConstants.SWI_MR_PLAYSOUND:
				swi_mr_playSound(vm);
				break;
			case DefineConstants.SWI_MR_STOPSOUND:
				swi_mr_stopSound(vm);
				break;
			case DefineConstants.SWI_MR_SLEEP:
				swi_mr_sleep(vm);
                break;
            case DefineConstants.SWI_MR_GETUSERINFO:
                vm.cpu.registers[0] = 0;
                break;
			case DefineConstants.SWI_MR_EXIT:
				GameStart.Ins.ExitGame();
				break;
			default:
				print(string.Format("产生中断:0x{0:x8}  {1}  ", nu, nu));
				break;
		}
	}

	private static void swi_mr_sleep(vm_info_st vm)
    {
		uint time = vm.cpu.registers[0];
		usleep(time);
		vm.cpu.registers[0] = 0;
	}

	private static void swi_mr_playSound(vm_info_st vm)
	{
		uint index = (vm.cpu.registers[0]);
		uint input0 = (vm.cpu.registers[1]);
		UnityEngine.Debug.Log("playSound : " + vm.cpu.registers[0]);
		GameStart.Ins.PlayAudio(index, input0!=0);
	}

	private static void swi_mr_stopSound(vm_info_st vm)
	{
		uint index = (vm.cpu.registers[0]);
		if (GameStart.isLog)
			UnityEngine.Debug.Log("stopSound : " + index);
		GameStart.Ins.StopAudio(index);
	}

	private static void swi_mr_getDateTime(vm_info_st vm)
    {
		uint code = (vm.cpu.registers[0]);
		
		if(GameStart.isLog)
		UnityEngine.Debug .LogWarning("getDateTime : " + code);
		vm.cpu.registers[0] = 1;
	}

	public static uint PLAT()
    {
        uint code = (vm.cpu.registers[0]);
        uint input0 = (vm.cpu.registers[1]);
        uint input1 = (vm.cpu.registers[2]);

        Console.Write("mr_plat(code={0:D}, input0={1:D}, input1={2:D})", code, input0, input1);
        //这个直接调用系统的就可以
        vm.cpu.registers[0] = mr_plat(vm,code,input0);
		return 1;
    }

    public static uint PLATEX()
    {
        uint code = (vm.cpu.registers[0]);
        uint input = (vm.cpu.registers[1]);
        uint input_len = (vm.cpu.registers[2]);
		int output_len=0;
		byte* output = null;
		uint ret = 0;
		Console.Write("mr_platEx(code={0:D}, input0={1:D}, input1={2:D})", code, input, input_len);
		//这个直接调用系统的就可以

		ret = mr_platEx(vm, code, input, input_len, &output, &output_len, 0);
	

		vm.cpu.registers[0]=ret;
		return 2;
	}

	public static int on_sorftware_interrupt(cpu_state_t st, uint nu)
	{
		//反向得到虚拟机指针
		//vm_mem_map_st* memmap = (vm_mem_map_st*)(st.mem.bufferP + DefineConstants.VM_MEM_OFFSET); //取得内存映射
		//vm_info_st vm = (vm_info_st)memmap.vmaddr; //从内存映射中取得虚拟机地址
		
		//处理中断
		handle_interapt(vm, nu);
		return 0;
	}
	/*
	创建一个虚拟机
	参数：
		memSize		堆内存大小
	*/
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'vm_info_st' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	public static uint MemMapSie;
	public  static vm_info_st vm_create(uint memSize)
	{
        //内存分配
        int v = sizeof(IntPtr);
        uint cpu_mem_size = (uint)(sizeof(vm_mem_map_st) + DefineConstants.VM_MEM_OFFSET + memSize); //计算CPU内存大小
		//vm_mem_map_st memMap = new vm_mem_map_st();
		vm = new vm_info_st();
		//uint size = GetSize(new vm_mem_map_st()); //1个字节
		//uint size = 6940 + 1024 * 20 + 480 * 800*2; //(uint)Marshal.SizeOf(memMap); //6942个字节
		//uint size = DefineConstants.VM_MAX_PIXELS * 2 + DefineConstants.VM_STACK_SIZE + 6940; //(uint)Marshal.SizeOf(memMap); //6942个字节
		MemMapSie = (uint)sizeof(vm_mem_map_st);
		//uint cpu_mem_size =(uint)(size+DefineConstants.VM_MEM_OFFSET + memSize); //计算CPU内存大小
		memory_t mem = mem_create(cpu_mem_size); //分配内存
        if (mem == null)
        {
            return null;
        }
        
        Console.Write("vm_create(memSize={0:D}, totalSize={1:D})", memSize, cpu_mem_size);
        
		
		//用一个指针指向内存映射的区域
		vm_mem_map_st* memMap2 = (vm_mem_map_st*)(mem.bufferP + DefineConstants.VM_MEM_OFFSET);
		
        
		//memMap.vmaddr = (void*)getMemoryPtr(vm); //保存虚拟机地址
        //Insert(memMap, mem.buffer, DefineConstants.VM_MEM_OFFSET);
		//uint* a= stackalloc uint[100];
		//memMap.mr_func_tab = a;
		//分配CPU
		cpu_state_t cpu = cpu_create(mem);
        if (cpu == null)
        {
            mem_destory(mem);
            return null;
        }
		
		//分配虚拟机
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'vm_info_st' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
		//vm_info_st vm = (vm_info_st)malloc(sizeof(vm_info_st)); 
		if (vm == null)
        {
            mem_destory(mem);
            cpu_destory(cpu);
            return null;
        }
        //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'vm_info_st' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
        //memset(vm, 0, sizeof(vm_info_st));
        //初始化
        //memMap.vmaddr = (void*)getMemoryPtr( vm); //保存虚拟机地址
        vm.mem = memMap2; //保存内存映射
        vm.cpu = cpu; //保存CPU信息
		vm.startTime = new timeval();
        gettimeofday(vm.startTime, null); //初始化创建时间
		//设置一下虚拟机的栈，由于栈是从高往第的，所以SP指向栈的最后一个地址
		//vm.cpu.registers[DefineConstants.r_sp] = ((byte)(vm.mem.stack + DefineConstants.VM_STACK_SIZE) - (byte)(vm.cpu.mem.buffer));
		byte* stack = vm.mem->stack;
            vm.cpu.registers[DefineConstants.r_sp] = vm_mem_offset(stack + DefineConstants.VM_STACK_SIZE);
        //初始化一下内存
        mem_init(vm);
        //安装函数表
        vm_install_func(vm);
        
        //返回出去
        return vm;
    }
	/*
	释放虚拟机
	参数：
		vm		虚拟机
	*/
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'vm_info_st' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	public static void vm_free(vm_info_st vm)
	{
		if (vm == null)
		{
			return;
		}
		
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
//ORIGINAL LINE: printf("vm_free(vm=%p)",__VA_ARGS__);
		Console.Write("vm_free(vm=%p)",__VA_ARGS__);
		
		//释放字体
		font_free(vm);
		//释放CPU
		if (vm.cpu != null)
		{
			cpu_destory(vm.cpu);
		}
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'vm_info_st' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
		//memset(vm, 0, sizeof(vm_info_st));
		memset(vm, 0, GetSize(vm));
		//释放虚拟机
		
		free(vm);
	}
	/*
	指定PC寄存器运行虚拟机，运行结束时此函数退出，并返回退出前r0的寄存器的值。
	当虚拟机栈已经清空了就会退出虚拟机。
	参数：
		vm		虚拟机
		pc		pc寄存器的值
	返回：
		额，也就是pc指向的函数执行后的返回值
	*/
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'vm_info_st' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	private static int InstIndex;
    public  static bool isop;
    public static uint vm_run(vm_info_st vm, uint pc)
	{
        isStartArm = false;
        isStartThumb = false;
        vm.cpu.Mode=(uint)(Thumb.Arm7Mode.SYS);
        vm.cpu.registers[DefineConstants.r_lr] = 0; //先设置lr寄存器位0，以便函数调用结束后pc为0
		vm.cpu.registers[DefineConstants.r_pc] = pc; //设置pc寄存器，指向函数入口
													 //OnUpDate
													 //如果PC寄存器一直不是0则一直循环，当PC指定的函数运行结束并返回后，此时的PC应该是0
		int n = 0;
        int sp = 10000;
        int v = GameStart.Ins.testvalue;
        
        while (vm.cpu.registers[DefineConstants.r_pc] >16)
		{
			n++;
		    InstIndex = n;

            if (n >=v&& IsEnd)
            {
               v = v + 10;
            }

            if (vm.cpu.registers[DefineConstants.r_sp] <sp )
            {
                sp = sp/2;
            }

            if(isHaveThumb)
            {
                if (n > GameStart.Ins.nMax)
                {
					GameStart.Ins.isUpdate = true;
                    return uint.MaxValue;
				}
            }
            else
            {
                if (n > GameStart.Ins.nMax*100)
                {
					GameStart.Ins.isUpdate = true;
					return uint.MaxValue;
                }
            }
           
			if (IsEnd&&DefineConstants .Cycle <n)
			{
                GameStart.Ins.isUpdate = true;
                return vm.cpu.registers[0];
            }
			UpData();
		}
		//if(GameStart.isPrint)
        //print("n:"+n+ "   vm.cpu.registers[0]:" + vm.cpu.registers[0] + "   vm.cpu.registers[15]:" + vm.cpu.registers[15]);
		//返回函数执行后的返回结果
		return vm.cpu.registers[0];
	}

	public static bool IsEnd; 

    public static bool isStartThumb;
    public static bool isStartThumbCore;
    public static bool isStartArm;
    private static bool isHaveThumb;

	public static void UpData()
    {
		if (vm.cpu.registers[DefineConstants.r_pc] > 16)
		{
            if (vm.cpu.cpsr.t)
            {
                isHaveThumb = true;
                //取指令
                if (GameStart .Ins.TestThumbIndex==1)
                {
                    ushort inst = mem_ld16(vm.cpu.mem, vm.cpu.registers[DefineConstants.r_pc]);

                    //vm.cpu.registers[DefineConstants.r_pc] += 2; //下一条指令
                    Inst = inst;
                    if (inst ==0)
                    {

                    }
                    //if (!isStartThumb)
                    //{
                    //    Thumb.thumb.BeginExecution();
                    //   // Thumb.thumb.GetInst();
                    //    isStartThumb = true;
                    //}
                    //else
                    //{

                    //}

                    Thumb.thumb.Execute();
                   
                    //cpu_thumb_exec_inst(vm.cpu, inst); //执行指令
                }
                else
                {
                    //if (!isStartThumbCore)
                    //{
                    //    ThumbCore.thumbCore.ChengeThumb();
                    //    ThumbCore.thumbCore.BeginExecution();
                    //    isStartThumbCore = true;
                    //}
                    //else
                    //{

                    //}
                    ThumbCore.thumbCore.parent.Cycles = 1;
                    ThumbCore.thumbCore.Execute();
                   
                }

               
            }
            else
            {
                if(GameStart.Ins.isGbaArm)
                {
                    if (!isStartArm)
                    {
                        OptimeGBA.Arm.BeginExecution();
                        isStartArm = true;
                    }
                    OptimeGBA.Arm.ExecuteArm(vm.cpu);
                    //GameStart.Ins.SeveRe(vm.cpu.R);
                    //GameStart.Ins.SeveRe(new uint[] {vm.cpu.cpsr.c , vm.cpu.cpsr.n, vm.cpu.cpsr.z, vm.cpu.cpsr.v});
                }
                else
                {
                    uint inst = cpu_fetch_inst(vm.cpu); //取指令
                    Inst = inst;
                    if(inst== mem_ld32(vm.cpu.mem, vm.mem->mr_state.mr_c_function_load - 4))
                    {

                    }
                    if (inst == 0xe28d0004)
                    {
                        println("暂停");
                        put_stack = true;
                    }
                    // if (put_stack)
                    // 	dev_pup_stach(vm);
                    cpu_exec_inst(vm.cpu, inst); //执行指令
                                                 //                             //    cpu_print_regs(vm->cpu);
                                                 //GameStart.Ins.RandRe(new uint[] { vm.cpu.cpsr.c, vm.cpu.cpsr.n, vm.cpu.cpsr.z, vm.cpu.cpsr.v });
                    if (vm.cpu.cpsr.t)
                    {
                        if (GameStart.Ins.TestThumbIndex == 1)
                            Thumb.thumb.BeginExecution();
                        if (GameStart.Ins.TestThumbIndex == 2)
                            ThumbCore.thumbCore.BeginExecution();
                    }
                }
                isStartThumbCore = false;


            }

        }
	}

    public static void cpu_thumb_exec_inst(cpu_state_t st, ushort inst)
    {

        inst = mem_ld16(vm.cpu.mem, vm.cpu.registers[DefineConstants.r_pc]-4);

        int decodeBits = (int)(inst >> 6);

        Thumb.ThumbDispatch[decodeBits](st, inst);

        if (st.ThumbState)
        {
            st.R[15] += 2;
        }
        else
        {
             //st.R[15] += 4;
        }
    }

	/*获取显存地址及长度*/
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'vm_info_st' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: C# has no equivalent to methods returning pointers to value types:
//ORIGINAL LINE: ushort *vm_getVideo(vm_info_st *vm, uint *size)
	public static ushort* vm_getVideo(vm_info_st vm, ref uint size)
	{
		if (size == 0)
		{
			return null;
		}
		size = (vm.mem->mr_state).sysinfo.screen_width * (vm.mem->mr_state).sysinfo.screen_height;
		ushort* v = vm.mem->video;
			return v;
		//return vm.mem->video;
	}
	/*进行虚拟机配置*/
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'vm_info_st' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	public static void vm_setConfig(vm_info_st vm, vm_config_t conf)
	{
		
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The following line has a C format specifier which cannot be directly translated to C#:
//ORIGINAL LINE: printf("mv_setConfig(vm=%p, conf=%p)",__VA_ARGS__);
		Console.Write("mv_setConfig(vm=%p, conf=%p)",__VA_ARGS__);
		
		(vm.mem->mr_state).sysinfo.screen_width = conf.screenWidth;
		(vm.mem->mr_state).sysinfo.screen_height = conf.screenHeight;
		(vm.mem->mr_state).sysinfo.screen_bits = 24;
		if (conf.IMEI != null)
		{
			//fixed (byte* i = (vm.mem->mr_state).sysinfo.IMEI)
				byte* i = (vm.mem->mr_state).sysinfo.IMEI;
			{
				//byte[] date= StringTobyte(conf.IMEI.Substring(0, ((conf.IMEI.Length) > (Sizeofc(i) - 1) ? (int)(Sizeofc(i) - 1) : (conf.IMEI.Length))));
				byte[] date = StringTobyte(conf.IMEI.Substring(0, (conf.IMEI.Length)));
				memcpy(i,date,0,(uint)date.Length);
			}
			//(vm.mem->mr_state).sysinfo.IMEI = StringTobyte(conf.IMEI.Substring(0, ((conf.IMEI.Length) > (Sizeof((vm.mem->mr_state).sysinfo.IMEI) - 1) ? (int)(Sizeof((vm.mem->mr_state).sysinfo.IMEI) - 1) : (conf.IMEI.Length))));
		}
		//if (conf.IMSI != 0)
		if (conf.IMSI != null)
		{
			//fixed (byte* i = (vm.mem->mr_state).sysinfo.IMSI)
			byte* i = (vm.mem->mr_state).sysinfo.IMSI;
			{
				//byte[] date = StringTobyte(conf.IMSI.Substring(0, ((conf.IMSI.Length) > (Sizeofc(i) - 1) ? (int)(Sizeofc(i) - 1) : (conf.IMSI.Length))));
				byte[] date = StringTobyte(conf.IMSI.Substring(0, ((conf.IMSI.Length))));
				memcpy(i, date, 0, (uint)date.Length);
			}
			//(vm.mem->mr_state).sysinfo.IMSI = StringTobyte(conf.IMSI.Substring(0, ((conf.IMSI.Length) > (Sizeof((vm.mem->mr_state).sysinfo.IMSI) - 1) ? (int)(Sizeof((vm.mem->mr_state).sysinfo.IMSI) - 1) : (conf.IMSI.Length))));
		}
		//if (conf.manufactory != 0)
		if (conf.manufactory != null)
		{
			//fixed (char* i = (vm.mem->mr_state).sysinfo.manufactory)
			sbyte* i = (vm.mem->mr_state).sysinfo.manufactory;
			{
				//byte[] date = StringTobyte(conf.manufactory.Substring(0, ((conf.manufactory.Length) > (Sizeofc(i) - 1) ? (int)(Sizeofc(i) - 1) : (conf.manufactory.Length))));
				byte[] date = StringTobyte(conf.manufactory.Substring(0, ((conf.manufactory.Length))));
				memcpy(i, date, 0, (uint)date.Length);
			}
			//(vm.mem->mr_state).sysinfo.manufactory = conf.manufactory.Substring(0, ((conf.manufactory.Length) > (Sizeof((vm.mem->mr_state).sysinfo.manufactory) - 1) ? (int)(Sizeof((vm.mem->mr_state).sysinfo.manufactory) - 1) : (conf.manufactory.Length)));
		}
		//if (conf.type != 0)
		if (conf.type != null)
		{
			//fixed (char* i = (vm.mem->mr_state).sysinfo.type)
			sbyte* i = (vm.mem->mr_state).sysinfo.type;
			{
				//byte[] date = StringTobyte(conf.type.Substring(0, ((conf.type.Length) > (Sizeofc(i) - 1) ? (int)(Sizeofc(i) - 1) : (conf.type.Length))));
				byte[] date = StringTobyte(conf.type.Substring(0, ((conf.type.Length))));
				memcpy(i, date, 0, (uint)date.Length);
			}
			//(vm.mem->mr_state).sysinfo.type = conf.type.Substring(0, ((conf.type.Length) > (Sizeof((vm.mem->mr_state).sysinfo.type) - 1) ? (int)(Sizeof((vm.mem->mr_state).sysinfo.type) - 1) : (conf.type.Length)));
		}
		(vm.mem->mr_state).sysinfo.networkID = conf.networkId;
		//if (conf.sdcardDir != 0)
		if (conf.sdcardDir != null)
		{
			//fixed (sbyte* i = (vm.mem->mr_state).sysinfo.sdcard_dir)
			sbyte* i = (vm.mem->mr_state).sysinfo.sdcard_dir;
			{
				byte[] date = StringTobyte(conf.sdcardDir.Substring(0, ((conf.sdcardDir.Length) > (DefineConstants.MAX_FILE_PATH_LEN) ? (int)(DefineConstants.MAX_FILE_PATH_LEN) : (conf.sdcardDir.Length))));
				memcpy(i, date, 0, (uint)date.Length);
			}
			
			//(vm.mem->mr_state).sysinfo.sdcard_dir = conf.sdcardDir.Substring(0, ((conf.sdcardDir.Length) > (DefineConstants.MAX_FILE_PATH_LEN) ? (int)(DefineConstants.MAX_FILE_PATH_LEN) : (conf.sdcardDir.Length)));
		}
		//if (conf.dsmDir != 0)
		if (conf.dsmDir != null)
		{
			//fixed (sbyte* i = (vm.mem->mr_state).sysinfo.dsm_dir)
				sbyte* i = (vm.mem->mr_state).sysinfo.dsm_dir;
			{
				byte[] date = StringTobyte(conf.dsmDir.Substring(0, ((conf.dsmDir.Length) > (DefineConstants.MAX_FILE_PATH_LEN) ? (int)(DefineConstants.MAX_FILE_PATH_LEN) : (conf.dsmDir.Length))));
				memcpy(i, date, 0, (uint)date.Length);
			}
			//(vm.mem->mr_state).sysinfo.dsm_dir = conf.dsmDir.Substring(0, ((conf.dsmDir.Length) > (DefineConstants.MAX_FILE_PATH_LEN) ? (int)(DefineConstants.MAX_FILE_PATH_LEN) : (conf.dsmDir.Length)));
		}
	}
	/*用来获取虚拟机特殊指针*/
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'vm_info_st' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	public static object[] vm_getPointers(vm_info_st vm)
	{
		return vm.pointers;
	}
	/*获取回调函数空间地址*/
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'vm_info_st' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	public static vm_callback_t vm_getCallbacks(vm_info_st vm)
	{
		return vm.callbacks;
	}
	
	//ORIGINAL LINE: #define MR_SPRITE_INDEX_MASK (0x03FF)
	
	//ORIGINAL LINE: #define MR_SPRITE_TRANSPARENT (0x0400)
	
	//ORIGINAL LINE: #define max(a, b) ((a) > (b) ? (a) : (b))
	
	//ORIGINAL LINE: #define min(a, b) ((a) > (b) ? (b) : (a))
	
	//ORIGINAL LINE: #define abs(a) (((a) >= 0) ? (a) : -(a))
	
	//ORIGINAL LINE: #define ntohl(num) ((num << 24) | ((num & 0x0000FF00) << 8) | ((num & 0x00FF0000) >> 8) | (num >> 24))
	
	//ORIGINAL LINE: #define vm_mem_poffset(n) (vm_mem_offset(&vm->mem->mr_func_tab_p) + ((n) << 2));
	internal static short[] c_func_tab = {DefineConstants.SWI_MR_MALLOC, DefineConstants.SWI_MR_FREE, DefineConstants.SWI_MR_REALLOC, DefineConstants.SWI_MR_MEMCPY, DefineConstants.SWI_MR_MEMMOVE, DefineConstants.SWI_MR_STRCPY, DefineConstants.SWI_MR_STRNCPY, DefineConstants.SWI_MR_STRCAT, DefineConstants.SWI_MR_STRNCAT, DefineConstants.SWI_MR_MEMCMP, DefineConstants.SWI_MR_STRCMP, DefineConstants.SWI_MR_STRNCMP, DefineConstants.SWI_MR_STRCOLL, DefineConstants.SWI_MR_MEMCHR, DefineConstants.SWI_MR_MEMSET, DefineConstants.SWI_MR_STRLEN, DefineConstants.SWI_MR_STRSTR, DefineConstants.SWI_MR_SPRINTF, DefineConstants.SWI_MR_ATOI, DefineConstants.SWI_MR_STRTOUL, DefineConstants.SWI_MR_RAND, DefineConstants.DATAP_RESERVE, DefineConstants.DATAP_RESERVE, DefineConstants.DATAP_C_INTERNAL_TABLE, DefineConstants.DATAP_C_PORT_TABLE, DefineConstants.SWI_MR_C_FUNCTION_NEW, DefineConstants.SWI_MR_PRINTF, DefineConstants.SWI_MR_MEM_GET, DefineConstants.SWI_MR_MEM_FREE, DefineConstants.SWI_MR_REFRESHBUFFER, DefineConstants.SWI_MR_GETCHARBITMAP, DefineConstants.SWI_MR_TIMERSTART, DefineConstants.SWI_MR_TIMERSTOP, DefineConstants.SWI_MR_GETTIME, DefineConstants.SWI_MR_GETDATETIME, DefineConstants.SWI_MR_GETUSERINFO, DefineConstants.SWI_MR_SLEEP, DefineConstants.SWI_MR_PLAT, DefineConstants.SWI_MR_PLATEX, DefineConstants.SWI_MR_FERRNO, DefineConstants.SWI_MR_OPEN, DefineConstants.SWI_MR_CLOSE, DefineConstants.SWI_MR_INFO, DefineConstants.SWI_MR_WRITE, DefineConstants.SWI_MR_READ, DefineConstants.SWI_MR_SEEK, DefineConstants.SWI_MR_GETLEN, DefineConstants.SWI_MR_REMOVE, DefineConstants.SWI_MR_RENAME, DefineConstants.SWI_MR_MKDIR, DefineConstants.SWI_MR_RMDIR, DefineConstants.SWI_MR_FINDSTART, DefineConstants.SWI_MR_FINDGETNEXT, DefineConstants.SWI_MR_FINDSTOP, DefineConstants.SWI_MR_EXIT, DefineConstants.SWI_MR_STARTSHAKE, DefineConstants.SWI_MR_STOPSHAKE, DefineConstants.SWI_MR_PLAYSOUND, DefineConstants.SWI_MR_STOPSOUND,
        DefineConstants.SWI_MR_SENDSMS, DefineConstants.SWI_MR_CALL, DefineConstants.SWI_MR_GETNETWORKID, DefineConstants.SWI_MR_CONNECTWAP, DefineConstants.SWI_MR_MENUCREATE, DefineConstants.SWI_MR_MENUSETITEM, DefineConstants.SWI_MR_MENUSHOW, DefineConstants.DATAP_RESERVE, DefineConstants.SWI_MR_MENURELEASE, DefineConstants.SWI_MR_MENUREFRESH, DefineConstants.SWI_MR_DIALOGCREATE, DefineConstants.SWI_MR_DIALOGRELEASE, DefineConstants.SWI_MR_DIALOGREFRESH, DefineConstants.SWI_MR_TEXTCREATE, DefineConstants.SWI_MR_TEXTRELEASE, DefineConstants.SWI_MR_TEXTREFRESH, DefineConstants.SWI_MR_EDITCREATE, DefineConstants.SWI_MR_EDITRELEASE, DefineConstants.SWI_MR_EDITGETTEXT, DefineConstants.SWI_MR_WINCREATE, DefineConstants.SWI_MR_WINRELEASE, DefineConstants.SWI_MR_GETSCREENINFO, DefineConstants.SWI_MR_INITNETWORK, DefineConstants.SWI_MR_CLOSENETWORK, DefineConstants.SWI_MR_GETHOSTBYNAME, DefineConstants.SWI_MR_SOCKET, DefineConstants.SWI_MR_CONNECT, DefineConstants.SWI_MR_CLOSESOCKET, DefineConstants.SWI_MR_RECV, DefineConstants.SWI_MR_RECVFROM, DefineConstants.SWI_MR_SEND, DefineConstants.SWI_MR_SENDTO, DefineConstants.DATAP_SCREENBUF, DefineConstants.DATAP_SCREENWIDTH,
        DefineConstants.DATAP_SCREENHEIGHT, DefineConstants.DATAP_SCREENBIT, DefineConstants.DATAP_BITMAP, DefineConstants.DATAP_TILE, DefineConstants.DATAP_MAP, DefineConstants.DATAP_SOUND, DefineConstants.DATAP_SPRITE, DefineConstants.DATAP_PACK_FILENAME, DefineConstants.DATAP_START_FILENAME, DefineConstants.DATAP_OLD_PACK_FILENAME, DefineConstants.DATAP_OLD_START_FILENAME, DefineConstants.DATAP_RAM_FILE, DefineConstants.DATAP_RAM_FILE_LEN, DefineConstants.DATAP_SOUNDON, DefineConstants.DATAP_SHAKEON, DefineConstants.DATAP_LG_MEM_BASE, DefineConstants.DATAP_LG_MEM_LEN, DefineConstants.DATAP_LG_MEM_END, DefineConstants.DATAP_LG_MEM_LEFT, DefineConstants.DATAP_SMS_CFG_BUF, DefineConstants.SWI_MR_MD5_INIT, DefineConstants.SWI_MR_MD5_APPEND, DefineConstants.SWI_MR_MD5_FINISH, DefineConstants.SWI_MR_LOAD_SMS_CFG, DefineConstants.SWI_MR_SAVE_SMS_CFG, DefineConstants.SWI_MR_DISPUPEX, DefineConstants.SWI_MR_DRAWPOINT, DefineConstants.SWI_MR_DRAWBITMAP, DefineConstants.SWI_MR_DRAWBITMAPEX, DefineConstants.SWI_MR_DRAWRECT, DefineConstants.SWI_MR_DRAWTEXT, DefineConstants.SWI_MR_BITMAPCHECK, DefineConstants.SWI_MR_READFILE, DefineConstants.SWI_MR_WSTRLEN, DefineConstants.SWI_MR_REGISTERAPP, DefineConstants.SWI_MR_DRAWTEXTEX, DefineConstants.SWI_MR_EFFSETCON, DefineConstants.SWI_MR_TESTCOM, DefineConstants.SWI_MR_TESTCOM1, DefineConstants.SWI_MR_C2U, DefineConstants.SWI_MR_DIV, DefineConstants.SWI_MR_MOD, DefineConstants.DATAP_LG_MEM_MIN, DefineConstants.DATAP_LG_MEM_TOP, DefineConstants.SWI_MR_UPDCRC, DefineConstants.DATAP_START_FILE_PARAMETER, DefineConstants.DATAP_SMS_RETURN_FLAG, DefineConstants.DATAP_SMS_RETURN_VAL, DefineConstants.SWI_MR_UNZIP, DefineConstants.DATAP_EXIT_CB, DefineConstants.DATAP_EXIT_CB_DATA, DefineConstants.DATAP_ENTRY, DefineConstants.SWI_MR_PLATDRAWCHAR, DefineConstants.DATAP_LG_MEM_FREE, DefineConstants.SWI_MR_TRANSBITMAPDRAW, DefineConstants.SWI_MR_DRAWREGION};
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'vm_info_st' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	public unsafe static void vm_install_func(vm_info_st vm)
	{
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: This 'sizeof' ratio was replaced with a direct reference to the array length:
		//ORIGINAL LINE: uint tlen = sizeof(c_func_tab) / sizeof(short);
		int tlen = c_func_tab.Length;
		for (uint i = 0; i < tlen; i++)
		{
			// logi("load_funcTable: I=0x%04x(%d), V=0x%08x(%d)", i, i, c_func_tab[i], c_func_tab[i]);
			if (c_func_tab[i] == 0)
			{
				continue;
			}
			else if (c_func_tab[i] > 0)
			{
				vm_install_func1(vm, i, (ushort)c_func_tab[i]);
			}
			else
			{
				switch (c_func_tab[i])
				{
					//内存相关的
					case DefineConstants.DATAP_LG_MEM_BASE:
						//fixed (uint* b = &(vm.mem->mr_state.mem_state.@base))
						uint* b = &(vm.mem->mr_state.mem_state.@base);
						{
							vm.mem->mr_func_tab[i] = vm_mem_offset(b);
						}
						break;
					case DefineConstants.DATAP_LG_MEM_LEN:
						//fixed (uint* b = &(vm.mem->mr_state.mem_state.len))
						uint* b2 = &(vm.mem->mr_state.mem_state.len);
						{
							vm.mem->mr_func_tab[i] = vm_mem_offset(b2);
						}
						break;
					case DefineConstants.DATAP_LG_MEM_END:
						//fixed (uint* b = &(vm.mem->mr_state.mem_state.end))
						uint* b3 = &(vm.mem->mr_state.mem_state.end);
						{
							vm.mem->mr_func_tab[i] = vm_mem_offset(b3);
						}

						break;
					case DefineConstants.DATAP_LG_MEM_LEFT:
						//fixed (uint* b = &(vm.mem->mr_state.mem_state.left))
						uint* b4 = &(vm.mem->mr_state.mem_state.left);
						{
							vm.mem->mr_func_tab[i] = vm_mem_offset(b4);
						}

						break;
					case DefineConstants.DATAP_LG_MEM_MIN:
						//fixed (uint* b = &(vm.mem->mr_state.mem_state.min))
						uint* b5 = &(vm.mem->mr_state.mem_state.min);
						{
							vm.mem->mr_func_tab[i] = vm_mem_offset(b5);
						}
						break;
					case DefineConstants.DATAP_LG_MEM_TOP:
						uint* b6 = &(vm.mem->mr_state.mem_state.top);
						//fixed (uint* b = &(vm.mem->mr_state.mem_state.top))
						{
							vm.mem->mr_func_tab[i] = vm_mem_offset(b6);
						}

						break;
					case DefineConstants.DATAP_LG_MEM_FREE:
						//fixed (mr_free_mem_st* b = &(vm.mem->mr_state.mem_state.free))
						mr_free_mem_st* b7 = &(vm.mem->mr_state.mem_state.free);
						{
							vm.mem->mr_func_tab[i] = vm_mem_offset(b7);
						}
						break;
					//屏幕相关的
					case DefineConstants.DATAP_SCREENBUF:
						// uint16 **
						//fixed (ushort* b = vm.mem->video)
						ushort* b8 = vm.mem->video;
						{
							vm.mem->mr_func_tab_p[i] = vm_mem_offset(b8);
						}
						vm.mem->mr_func_tab[i] = vm_mem_poffset(i);
						//vm_mem_offset(&vm->mem->mr_func_tab_p) + i;
						break;
					case DefineConstants.DATAP_SCREENWIDTH:
						//fixed (uint* b = &(vm.mem->mr_state.sysinfo.screen_width))
						uint* b9 = &(vm.mem->mr_state.sysinfo.screen_width);
						{
							vm.mem->mr_func_tab[i] = vm_mem_offset(b9);
						}
						//vm.mem->mr_func_tab[i] = ((byte)((vm.mem->mr_state).sysinfo.screen_width) - (byte)(vm.cpu.mem.buffer));
						break;
					case DefineConstants.DATAP_SCREENHEIGHT:
						//fixed (uint* b11 = &(vm.mem->mr_state.sysinfo.screen_height))
						//{
						//	vm.mem->mr_func_tab[i] = vm_mem_offset(b11);
						//}
						vm.mem->mr_func_tab[i] = vm_mem_offset(&vm.mem->mr_state.sysinfo.screen_height);
						break;
					case DefineConstants.DATAP_SCREENBIT:
						//fixed (uint* b = &(vm.mem->mr_state.sysinfo.screen_bits))
						//{
						//	vm.mem->mr_func_tab[i] = vm_mem_offset(b);
						//}
						vm.mem->mr_func_tab[i] = vm_mem_offset(&vm.mem->mr_state.sysinfo.screen_bits);
						break;
					//mrp包信息
					case DefineConstants.DATAP_PACK_FILENAME:

						vm.mem->mr_func_tab[i] = vm_mem_offset((vm.mem->mr_state).pack_filename);
						break;
					case DefineConstants.DATAP_OLD_PACK_FILENAME:
						//fixed (sbyte* b = vm.mem->mr_state.old_pack_filename)
						//	vm.mem->mr_func_tab[i] = vm_mem_offset(b);
						vm.mem->mr_func_tab[i] = vm_mem_offset((vm.mem->mr_state).old_pack_filename);
						break;
					case DefineConstants.DATAP_START_FILENAME:
						//fixed (sbyte* b = vm.mem->mr_state.start_filename)
						//	vm.mem->mr_func_tab[i] = vm_mem_offset(b);
						vm.mem->mr_func_tab[i] = vm_mem_offset((vm.mem->mr_state).start_filename);
						break;
					case DefineConstants.DATAP_OLD_START_FILENAME:
						//fixed (sbyte* b = vm.mem->mr_state.old_start_filename)
						//	vm.mem->mr_func_tab[i] = vm_mem_offset(b);
						vm.mem->mr_func_tab[i] = vm_mem_offset((vm.mem->mr_state).old_start_filename);
						break;
					case DefineConstants.DATAP_START_FILE_PARAMETER:
						//fixed (sbyte* b = vm.mem->mr_state.start_file_parameter)
						//	vm.mem->mr_func_tab[i] = vm_mem_offset(b);
						vm.mem->mr_func_tab[i] = vm_mem_offset((vm.mem->mr_state).start_file_parameter);
						break;
					case DefineConstants.DATAP_ENTRY:
						//fixed (sbyte* b = vm.mem->mr_state.entry)
						//	vm.mem->mr_func_tab[i] = vm_mem_offset(b);
						vm.mem->mr_func_tab[i] = vm_mem_offset((vm.mem->mr_state).entry);
						break;
					//系统相关
					case DefineConstants.DATAP_SOUNDON:
						//fixed (sbyte* b = &(vm.mem->mr_state.mr_soundOn))
						//	vm.mem->mr_func_tab[i] = vm_mem_offset(b);
						vm.mem->mr_func_tab[i] = vm_mem_offset(&(vm.mem->mr_state).mr_soundOn);
						break;
					case DefineConstants.DATAP_SHAKEON:
						//fixed (sbyte* b = &(vm.mem->mr_state.mr_shakeOn))
						//	vm.mem->mr_func_tab[i] = vm_mem_offset(b);
						vm.mem->mr_func_tab[i] = vm_mem_offset(&(vm.mem->mr_state).mr_shakeOn);
						break;
					case DefineConstants.DATAP_C_INTERNAL_TABLE:

						vm.mem->mr_state.mr_c_internal_table[0] = vm_mem_offset(vm.mem->mr_state.mr_m0_files);
						vm.mem->mr_state.mr_c_internal_table[1] = vm_mem_offset(&vm.mem->mr_state.vm_state);
						vm.mem->mr_state.mr_c_internal_table[2] = vm_mem_offset(&vm.mem->mr_state.mr_state);
						vm.mem->mr_state.mr_c_internal_table[3] = vm_mem_offset(&vm.mem->mr_state.bi);
						vm.mem->mr_state.mr_c_internal_table[4] = vm_mem_offset(&vm.mem->mr_state.mr_timer_p);
						vm.mem->mr_state.mr_c_internal_table[5] = vm_mem_offset(&vm.mem->mr_state.mr_timer_state);
						vm.mem->mr_state.mr_c_internal_table[6] = vm_mem_offset(&vm.mem->mr_state.mr_timer_run_without_pause);
						vm.mem->mr_func_tab[i] = vm_mem_offset(vm.mem->mr_state.mr_c_internal_table);

						break;
					case DefineConstants.DATAP_RAM_FILE:
						//fixed (uint* b = &(vm.mem->mr_state.mr_ram_file))
						//	vm.mem->mr_func_tab[i] = vm_mem_offset(b);
						vm.mem->mr_func_tab[i] = vm_mem_offset(&(vm.mem->mr_state).mr_ram_file);
						break;
					case DefineConstants.DATAP_RAM_FILE_LEN:
						//fixed (uint* b = &(vm.mem->mr_state.mr_ram_file_len))
						//	vm.mem->mr_func_tab[i] = vm_mem_offset(b);
						vm.mem->mr_func_tab[i] = vm_mem_offset(&(vm.mem->mr_state).mr_ram_file_len);
						break;
					case DefineConstants.DATAP_C_PORT_TABLE:
						//fixed (uint* b = vm.mem->mr_state.mr_c_port_table)
						//	vm.mem->mr_func_tab[i] = vm_mem_offset(b);
						vm.mem->mr_func_tab[i] = vm_mem_offset((vm.mem->mr_state).mr_c_port_table);
						break;
					//短信
					case DefineConstants.DATAP_SMS_RETURN_FLAG:
						//fixed (byte* b = &(vm.mem->mr_state.mr_sms_return_flag))
						//	vm.mem->mr_func_tab[i] = vm_mem_offset(b);
						vm.mem->mr_func_tab[i] = vm_mem_offset(&(vm.mem->mr_state).mr_sms_return_flag);
						break;
					case DefineConstants.DATAP_SMS_RETURN_VAL:
						//fixed (int* b = &(vm.mem->mr_state.mr_sms_return_val))
						//	vm.mem->mr_func_tab[i] = vm_mem_offset(b);
						vm.mem->mr_func_tab[i] = vm_mem_offset(&(vm.mem->mr_state).mr_sms_return_val);
						break;
					case DefineConstants.DATAP_SMS_CFG_BUF:
						//fixed (uint* b = &(vm.mem->mr_state.mr_sms_cfg_buf))
						//	vm.mem->mr_func_tab[i] = vm_mem_offset(b);
						vm.mem->mr_func_tab[i] = vm_mem_offset(&(vm.mem->mr_state).mr_sms_cfg_buf);
						break;
					//一些资源相关的
					case DefineConstants.DATAP_BITMAP:
						vm.mem->mr_func_tab[i] = vm_mem_offset(&vm.mem->mr_state.mr_bitmap);
						break;
					case DefineConstants.DATAP_TILE:
						vm.mem->mr_func_tab[i] = vm_mem_offset(&(vm.mem->mr_state).mr_tile);
						break;
					case DefineConstants.DATAP_MAP:
						vm.mem->mr_func_tab[i] = vm_mem_offset((vm.mem->mr_state).mr_map);
						break;
					case DefineConstants.DATAP_SOUND:
						vm.mem->mr_func_tab[i] = vm_mem_offset(&(vm.mem->mr_state).mr_sound);
						break;
					case DefineConstants.DATAP_SPRITE:
						vm.mem->mr_func_tab[i] = vm_mem_offset(&(vm.mem->mr_state).mr_sprite);
						break;
					default:
						Console.Write("FUNCTABLE TODO:{0:D}", __VA_ARGS__);

						break;
				}
			}
		}
	}
	/*
	安装一个函数
	参数：
		vm			虚拟机
		index		安装到给定的位置
		swino		中断号，用于发起系统调用
	*/
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The typedef 'vm_info_st' was defined in multiple preprocessor conditionals and cannot be replaced in-line:
	public static void vm_install_func1(vm_info_st vm, uint index, ushort swino)
	{
		/*
		arm中的函数代码大体如下
			PUSH    {R11}			保存r11的值
			ADD     R11, SP, #0		//把sp的值存到r11中
			NOP						//程序
			MOV     SP, R11			//恢复sp
			POP     {R11}			//恢复r11
			BX      LR				//返回
		*/
		//这里简单起见就不用考虑得那么复杂了，直接中断即可
//ORIGINAL LINE: uint *start = vm->mem->mr_funcs + (index << 1);
		uint* start = vm.mem->mr_funcs + (index << 1); //每个函数两条指令所以*2
		//fixed( uint* start = &vm.mem.mr_funcs[ (index << 1) ])//每个函数两条指令所以*2
        {
			*start = 0xef000000 | swino; // swi xxxx    中断
			*(start + 1) = 0xe12fff1e; // bx lr        返回
			//保存函数指针
			vm.mem->mr_func_tab[index] = (uint)(((byte*)start) - (vm.cpu.mem.bufferP));
		}
		
	}
	public static bool put_stack = false;
    //编码转换，从GB2312转成unicode
    //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: C# has no equivalent to methods returning pointers to value types:
    //ORIGINAL LINE: const byte *GBCodeToUnicode(byte *gbCode)
    public unsafe static byte* GBCodeToUnicode(byte* gbCode)
    {
        //ORIGINAL LINE: const byte *p_map = 0;
        byte* p_map = (byte*)0;
        int i;
        if ((*(gbCode + 1) >= 0xa1) && (*(gbCode + 1) <= 0xfe))
        {
            if ((*gbCode >= 0xa1) && (*gbCode <= 0xa9))
            {
                i = ((*gbCode - 0xa1) * 94 + (*(gbCode + 1) - 0xa1)) * 2;
                p_map = (byte*)getBytePtr(gb2uTable, (uint)i);
            }
            else if ((*gbCode >= 0xb0) && (*gbCode <= 0xf7))
            {
                i = ((*gbCode - 0xb0 + 9) * 94 + (*(gbCode + 1) - 0xa1)) * 2;
                p_map = (byte*)getBytePtr(gb2uTable, (uint)i);
            }
        }
        return p_map;
    }
    //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
    //int GBToUCS2(ref byte gbCode, ref byte unicode);
    // 转换unicode字符串为gb
    //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on the parameter 'uniStr', so pointers on this parameter are left unchanged:
    public static int UCS2ToGBString(ushort * uniStr, sbyte* gbBuf, uint gbMaxLen)
	{
		ushort Gb;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged:
		sbyte * gb = (sbyte*)gbBuf;
		while (*uniStr!=0 && gbMaxLen > 0)
		{
			if ((*uniStr <= 0x7f))
			{
				*gb++= (sbyte)(*uniStr & 0x00ff);
				gbMaxLen--;
			}
			else
			{
				Gb = Unicode2GB(*uniStr);
				*gb++= (sbyte)(Gb >> 8);
				*gb++= (sbyte)(Gb & 0x00ff);
				gbMaxLen -= 2;
			}
			uniStr++;
		}
		*gb = (sbyte)'\0';
		return (int)(gb - (sbyte*)gbBuf);
	}
// 转换utf8字符串为unicode小端
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on the parameter 'utf8Str', so pointers on this parameter are left unchanged:
	public static int UTF8ToUCS2String(byte * utf8Str, ushort* ucs2Buf, int ucs2MaxLen)
	{
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged:
		ushort * ucs2;
		byte v_Byte;
		ucs2 = ucs2Buf;
		if (ucs2 != null && utf8Str != null)
		{
			while ((v_Byte = *utf8Str) != 0 && (ucs2MaxLen-- > 0))
			{
				if ((v_Byte & 0x80) == 0)
				{
					/* 1 Byte */
					*ucs2++= v_Byte;
					utf8Str++;
				}
				else if ((v_Byte & 0xe0) == 0xc0)
				{
					/* 2 Bytes */
					*ucs2++= (ushort)(((v_Byte & 0x1f) << 6) | ((*(utf8Str + 1) & 0x3f)));
					utf8Str += 2;
				}
				else if ((v_Byte & 0xf0) == 0xe0)
				{
					/* 3 Bytes */
					*ucs2++= (ushort)(((v_Byte & 0x0f) << 12) | ((*(utf8Str + 1) & 0x3f) << 6) | ((*(utf8Str + 2) & 0x3f)));
					utf8Str += 3;
				}
				else
				{
					break;
				}
			}
			*ucs2 = 0;
		}
		return (int)(ucs2 - ucs2Buf);
	}
// 转换utf8字符串为gb
	public static int UTF8ToGBString(byte* utf8Str, byte* gbBuf, int gbMaxLen)
	{
		ushort Ucs2;
		ushort Gb;
		byte v_Byte;
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged:
		byte * gb;
		gb = gbBuf;
		if (gb!=null  && utf8Str !=null)
		{
			while ((v_Byte = *utf8Str) != 0 && (gbMaxLen > 0))
			{
				if ((v_Byte & 0x80) == 0)
				{
					/* 1 Byte */
					*gb++= v_Byte;
					utf8Str++;
					gbMaxLen--;
				}
				else if ((v_Byte & 0xe0) == 0xc0)
				{
					/* 2 Bytes */
					Ucs2 =( ushort )(((v_Byte & 0x1f) << 6) | ((*(utf8Str + 1) & 0x3f)));
					Gb = Unicode2GB(Ucs2);
					*gb++= (byte)(Gb >> 8);
					*gb++= (byte)(Gb & 0x00ff);
					utf8Str += 2;
					gbMaxLen -= 2;
				}
				else if ((v_Byte & 0xf0) == 0xe0)
				{
					/* 3 Bytes */
					Ucs2 = (ushort)(((v_Byte & 0x0f) << 12) | ((utf8Str[1] & 0x3f) << 6) | ((utf8Str[2] & 0x3f)));
					Gb = Unicode2GB(Ucs2);
					*gb++= (byte)(Gb >> 8);
					*gb++= (byte)(Gb & 0x00ff);
					utf8Str += 3;
					gbMaxLen -= 2;
				}
				else
				{
					break;
				}
			}
			*gb = 0;
		}
		return (int)((gb - gbBuf));
	}
    // 转换gb字符串为utf8
    //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on the parameter 'gbStr', so pointers on this parameter are left unchanged:
    //public static int GBToUTF8String(byte* gbStr,  byte* utf8Buf, int utf8MaxLen)
    //{
    //    byte[] unicode = new byte[2];
    //    //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged:
    //    byte* utf8;
    //    byte[] ucs2;
    //    utf8 = utf8Buf;
    //    while (*gbStr!=0 && utf8MaxLen > 0)
    //    {
    //        if (*gbStr < 128)
    //        {
    //            // 0 - 7 bits
    //            *utf8++ = *gbStr;
    //            gbStr++;
    //        }
    //        else
    //        {
    //            ucs2 = GBCodeToUnicode(gbStr);
    //            gbStr += 2;
    //            if (null != ucs2)
    //            {
    //                unicode[0] = ucs2[1];
    //                unicode[1] = ucs2[0];
    //            }
    //            else
    //            {
    //                // 全角空格
    //                /*unicode[0] = 0x30;
				//	unicode[1] = 0x00;*/
    //                // □
    //                unicode[0] = 0x25;
    //                unicode[1] = 0xa1;
    //            }
    //            if ((unicode[0] & 0xf8) == 0)
    //            {
    //                // 8 - 11 bits
    //                *utf8++ = 0xc0 | ((unicode[0] << 2) & 0xff) | (unicode[1] >> 6);
    //                *utf8++ = 0x80 | (unicode[1] & 0x3f);
    //            }
    //            else
    //            {
    //                // 12 - 16 bits
    //                *utf8++ = 0xe0 | (unicode[0] >> 4);
    //                *utf8++ = 0x80 | ((unicode[0] << 2) & 0x3f) | (unicode[1] >> 6);
    //                *utf8++ = 0x80 | (unicode[1] & 0x3f);
    //            }
    //        }
    //    }
    //    *utf8 = 0;
    //    return utf8 - utf8Buf;
    //}
    //将Unicode小端转为UTF8
    public static int UCS2ToUTF8(byte* unicode, byte[] utf8, int size)
	{
		int u = 0;
		int i = 0;
		//memset(utf8, 0, size);
		while ((unicode[u]!=0 || unicode[u + 1]!=0) && i < size - 1)
		{
			if (unicode[u] == 0 && unicode[u + 1] < 128)
			{
				// 0 - 7 bits
				utf8[i++] = unicode[u + 1];
			}
			else if ((unicode[u] & 0xf8) == 0)
			{
				// 8 - 11 bits
				utf8[i++] =(byte) (0xc0 | (unicode[u] << 2) | (unicode[u + 1] >> 6));
				utf8[i++] = (byte)(0x80 | (unicode[u + 1] & 0x3f));
			}
			else
			{
				// 12 - 16 bits
				utf8[i++] = (byte)(0xe0 | (unicode[u] >> 4));
				utf8[i++] = (byte)(0x80 | ((unicode[u] & 0x0f) << 2) | (unicode[u + 1] >> 6));
				utf8[i++] = (byte)(0x80 | (unicode[u + 1] & 0x3f));
			}
			u += 2;
		}
		utf8[i] = 0;
		return i;
	}
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: 'extern' variable declarations are not required in C#:
	//extern byte gb2uTable[];
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: 'extern' variable declarations are not required in C#:
	//extern t_ucs2gb_st tab_symucs2gb[];
//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 NOTE: 'extern' variable declarations are not required in C#:
	//extern ushort tab_ucs2gb[];
	//查找一个unicode字符对应的gb编码
	internal static ushort Unicode2GB(ushort ucs)
	{
		int First = 0;
		int Last = 717 - 1;
		int Mid;
		if (ucs >= 0x4E00 && ucs <= 0x9FA5)
		{
			return tab_ucs2gb[ucs - 0x4E00];
		}
		else
		{
			while (Last >= First)
			{
				Mid = (First + Last) >> 1;
				if (ucs < tab_symucs2gb[Mid].ucs)
				{
					Last = Mid - 1;
				}
				else if (ucs > tab_symucs2gb[Mid].ucs)
				{
					First = Mid + 1;
				}
				else if (ucs == tab_symucs2gb[Mid].ucs)
				{
					return tab_symucs2gb[Mid].gb;
				}
			}
		}
		return 0xffff;
	}
	//GB2312 -> UCS2LE
//	public static int gbToUCS2(byte[] gbCode, byte[] unicode)
//	{
//		int i = 0;
//		int j = 0;
//		if (gbCode == 0 || !gbCode[0] || unicode == 0)
//		{
//			return -1;
//		}
//		while (gbCode[i])
//		{
//			if (gbCode[i] < 0x80)
//			{
//				unicode[j + 1] = 0;
//				unicode[j] = gbCode[i];
//				i += 1;
//			}
//			else
//			{
//
////ORIGINAL LINE: const byte *pReturn = GBCodeToUnicode(&gbCode[i]);
//				byte pReturn = GBCodeToUnicode(ref gbCode[i]);
//				if (pReturn != 0) //&& (0 != *(pReturn))
//				{
//					unicode[j + 1] = *(pReturn + 1);
//					unicode[j] = pReturn;
//				}
//				else
//				{ //全角空格
//					unicode[j + 1] = 0x30;
//					unicode[j] = 0x00;
//				}
//				i += 2;
//			}
//			j += 2;
//		}
//		return j;
//	}
	
	
	
	
	// gb2uni码表
	public static byte[] gb2uTable = {0x00, 0x30, 0x01, 0x30, 0x02, 0x30, 0xb7, 0x00, 0xc9, 0x02, 0xc7, 0x02, 0xa8, 0x00, 0x03, 0x30, 0x05, 0x30, 0x14, 0x20, 0x5e, 0xff, 0x16,
        0x20, 0x26, 0x20, 0x18, 0x20, 0x19, 0x20, 0x1c, 0x20, 0x1d, 0x20, 0x14, 0x30, 0x15, 0x30, 0x08, 0x30, 0x09, 0x30, 0x0a, 0x30, 0x0b, 0x30, 0x0c, 0x30, 0x0d, 0x30, 0x0e,
        0x30, 0x0f, 0x30, 0x16, 0x30, 0x17, 0x30, 0x10, 0x30, 0x11, 0x30, 0xb1, 0x00, 0xd7, 0x00, 0xf7, 0x00, 0x36, 0x22, 0x27, 0x22, 0x28, 0x22, 0x11, 0x22, 0x0f, 0x22, 0x2a,
        0x22, 0x29, 0x22, 0x08, 0x22, 0x37, 0x22, 0x1a, 0x22, 0xa5, 0x22, 0x25, 0x22, 0x20, 0x22, 0x12, 0x23, 0x99, 0x22, 0x2b, 0x22, 0x2e, 0x22, 0x61, 0x22, 0x4c, 0x22, 0x48,
        0x22, 0x3d, 0x22, 0x1d, 0x22, 0x60, 0x22, 0x6e, 0x22, 0x6f, 0x22, 0x64, 0x22, 0x65, 0x22, 0x1e, 0x22, 0x35, 0x22, 0x34, 0x22, 0x42, 0x26, 0x40, 0x26, 0xb0, 0x00, 0x32,
        0x20, 0x33, 0x20, 0x03, 0x21, 0x04, 0xff, 0xa4, 0x00, 0xe0, 0xff, 0xe1, 0xff, 0x30, 0x20, 0xa7, 0x00, 0x16, 0x21, 0x06, 0x26, 0x05, 0x26, 0xcb, 0x25, 0xcf, 0x25, 0xce,
        0x25, 0xc7, 0x25, 0xc6, 0x25, 0xa1, 0x25, 0xa0, 0x25, 0xb3, 0x25, 0xb2, 0x25, 0x3b, 0x20, 0x92, 0x21, 0x90, 0x21, 0x91, 0x21, 0x93, 0x21, 0x13, 0x30, 0x70, 0x21, 0x71,
        0x21, 0x72, 0x21, 0x73, 0x21, 0x74, 0x21, 0x75, 0x21, 0x76, 0x21, 0x77, 0x21, 0x78, 0x21, 0x79, 0x21, 0x66, 0xe7, 0x67, 0xe7, 0x68, 0xe7, 0x69, 0xe7, 0x6a, 0xe7, 0x6b,
        0xe7, 0x88, 0x24, 0x89, 0x24, 0x8a, 0x24, 0x8b, 0x24, 0x8c, 0x24, 0x8d, 0x24, 0x8e, 0x24, 0x8f, 0x24, 0x90, 0x24, 0x91, 0x24, 0x92, 0x24, 0x93, 0x24, 0x94, 0x24, 0x95,
        0x24, 0x96, 0x24, 0x97, 0x24, 0x98, 0x24, 0x99, 0x24, 0x9a, 0x24, 0x9b, 0x24, 0x74, 0x24, 0x75, 0x24, 0x76, 0x24, 0x77, 0x24, 0x78, 0x24, 0x79, 0x24, 0x7a, 0x24, 0x7b,
        0x24, 0x7c, 0x24, 0x7d, 0x24, 0x7e, 0x24, 0x7f, 0x24, 0x80, 0x24, 0x81, 0x24, 0x82, 0x24, 0x83, 0x24, 0x84, 0x24, 0x85, 0x24, 0x86, 0x24, 0x87, 0x24, 0x60, 0x24, 0x61,
        0x24, 0x62, 0x24, 0x63, 0x24, 0x64, 0x24, 0x65, 0x24, 0x66, 0x24, 0x67, 0x24, 0x68, 0x24, 0x69, 0x24, 0x6c, 0xe7, 0x6d, 0xe7, 0x20, 0x32, 0x21, 0x32, 0x22, 0x32, 0x23,
        0x32, 0x24, 0x32, 0x25, 0x32, 0x26, 0x32, 0x27, 0x32, 0x28, 0x32, 0x29, 0x32, 0x6e, 0xe7, 0x6f, 0xe7, 0x60, 0x21, 0x61, 0x21, 0x62, 0x21, 0x63, 0x21, 0x64, 0x21, 0x65,
        0x21, 0x66, 0x21, 0x67, 0x21, 0x68, 0x21, 0x69, 0x21, 0x6a, 0x21, 0x6b, 0x21, 0x70, 0xe7, 0x71, 0xe7, 0x01, 0xff, 0x02, 0xff, 0x03, 0xff, 0xe5, 0xff, 0x05, 0xff, 0x06,
        0xff, 0x07, 0xff, 0x08, 0xff, 0x09, 0xff, 0x0a, 0xff, 0x0b, 0xff, 0x0c, 0xff, 0x0d, 0xff, 0x0e, 0xff, 0x0f, 0xff, 0x10, 0xff, 0x11, 0xff, 0x12, 0xff, 0x13, 0xff, 0x14,
        0xff, 0x15, 0xff, 0x16, 0xff, 0x17, 0xff, 0x18, 0xff, 0x19, 0xff, 0x1a, 0xff, 0x1b, 0xff, 0x1c, 0xff, 0x1d, 0xff, 0x1e, 0xff, 0x1f, 0xff, 0x20, 0xff, 0x21, 0xff, 0x22,
        0xff, 0x23, 0xff, 0x24, 0xff, 0x25, 0xff, 0x26, 0xff, 0x27, 0xff, 0x28, 0xff, 0x29, 0xff, 0x2a, 0xff, 0x2b, 0xff, 0x2c, 0xff, 0x2d, 0xff, 0x2e, 0xff, 0x2f, 0xff, 0x30,
        0xff, 0x31, 0xff, 0x32, 0xff, 0x33, 0xff, 0x34, 0xff, 0x35, 0xff, 0x36, 0xff, 0x37, 0xff, 0x38, 0xff, 0x39, 0xff, 0x3a, 0xff, 0x3b, 0xff, 0x3c, 0xff, 0x3d, 0xff, 0x3e,
        0xff, 0x3f, 0xff, 0x40, 0xff, 0x41, 0xff, 0x42, 0xff, 0x43, 0xff, 0x44, 0xff, 0x45, 0xff, 0x46, 0xff, 0x47, 0xff, 0x48, 0xff, 0x49, 0xff, 0x4a, 0xff, 0x4b, 0xff, 0x4c,
        0xff, 0x4d, 0xff, 0x4e, 0xff, 0x4f, 0xff, 0x50, 0xff, 0x51, 0xff, 0x52, 0xff, 0x53, 0xff, 0x54, 0xff, 0x55, 0xff, 0x56, 0xff, 0x57, 0xff, 0x58, 0xff, 0x59, 0xff, 0x5a,
        0xff, 0x5b, 0xff, 0x5c, 0xff, 0x5d, 0xff, 0xe3, 0xff, 0x41, 0x30, 0x42, 0x30, 0x43, 0x30, 0x44, 0x30, 0x45, 0x30, 0x46, 0x30, 0x47, 0x30, 0x48, 0x30, 0x49, 0x30, 0x4a,
        0x30, 0x4b, 0x30, 0x4c, 0x30, 0x4d, 0x30, 0x4e, 0x30, 0x4f, 0x30, 0x50, 0x30, 0x51, 0x30, 0x52, 0x30, 0x53, 0x30, 0x54, 0x30, 0x55, 0x30, 0x56, 0x30, 0x57, 0x30, 0x58,
        0x30, 0x59, 0x30, 0x5a, 0x30, 0x5b, 0x30, 0x5c, 0x30, 0x5d, 0x30, 0x5e, 0x30, 0x5f, 0x30, 0x60, 0x30, 0x61, 0x30, 0x62, 0x30, 0x63, 0x30, 0x64, 0x30, 0x65, 0x30, 0x66,
        0x30, 0x67, 0x30, 0x68, 0x30, 0x69, 0x30, 0x6a, 0x30, 0x6b, 0x30, 0x6c, 0x30, 0x6d, 0x30, 0x6e, 0x30, 0x6f, 0x30, 0x70, 0x30, 0x71, 0x30, 0x72, 0x30, 0x73, 0x30, 0x74,
        0x30, 0x75, 0x30, 0x76, 0x30, 0x77, 0x30, 0x78, 0x30, 0x79, 0x30, 0x7a, 0x30, 0x7b, 0x30, 0x7c, 0x30, 0x7d, 0x30, 0x7e, 0x30, 0x7f, 0x30, 0x80, 0x30, 0x81, 0x30, 0x82,
        0x30, 0x83, 0x30, 0x84, 0x30, 0x85, 0x30, 0x86, 0x30, 0x87, 0x30, 0x88, 0x30, 0x89, 0x30, 0x8a, 0x30, 0x8b, 0x30, 0x8c, 0x30, 0x8d, 0x30, 0x8e, 0x30, 0x8f, 0x30, 0x90,
        0x30, 0x91, 0x30, 0x92, 0x30, 0x93, 0x30, 0x72, 0xe7, 0x73, 0xe7, 0x74, 0xe7, 0x75, 0xe7, 0x76, 0xe7, 0x77, 0xe7, 0x78, 0xe7, 0x79, 0xe7, 0x7a, 0xe7, 0x7b, 0xe7, 0x7c,
        0xe7, 0xa1, 0x30, 0xa2, 0x30, 0xa3, 0x30, 0xa4, 0x30, 0xa5, 0x30, 0xa6, 0x30, 0xa7, 0x30, 0xa8, 0x30, 0xa9, 0x30, 0xaa, 0x30, 0xab, 0x30, 0xac, 0x30, 0xad, 0x30, 0xae,
        0x30, 0xaf, 0x30, 0xb0, 0x30, 0xb1, 0x30, 0xb2, 0x30, 0xb3, 0x30, 0xb4, 0x30, 0xb5, 0x30, 0xb6, 0x30, 0xb7, 0x30, 0xb8, 0x30, 0xb9, 0x30, 0xba, 0x30, 0xbb, 0x30, 0xbc,
        0x30, 0xbd, 0x30, 0xbe, 0x30, 0xbf, 0x30, 0xc0, 0x30, 0xc1, 0x30, 0xc2, 0x30, 0xc3, 0x30, 0xc4, 0x30, 0xc5, 0x30, 0xc6, 0x30, 0xc7, 0x30, 0xc8, 0x30, 0xc9, 0x30, 0xca,
        0x30, 0xcb, 0x30, 0xcc, 0x30, 0xcd, 0x30, 0xce, 0x30, 0xcf, 0x30, 0xd0, 0x30, 0xd1, 0x30, 0xd2, 0x30, 0xd3, 0x30, 0xd4, 0x30, 0xd5, 0x30, 0xd6, 0x30, 0xd7, 0x30, 0xd8,
        0x30, 0xd9, 0x30, 0xda, 0x30, 0xdb, 0x30, 0xdc, 0x30, 0xdd, 0x30, 0xde, 0x30, 0xdf, 0x30, 0xe0, 0x30, 0xe1, 0x30, 0xe2, 0x30, 0xe3, 0x30, 0xe4, 0x30, 0xe5, 0x30, 0xe6,
        0x30, 0xe7, 0x30, 0xe8, 0x30, 0xe9, 0x30, 0xea, 0x30, 0xeb, 0x30, 0xec, 0x30, 0xed, 0x30, 0xee, 0x30, 0xef, 0x30, 0xf0, 0x30, 0xf1, 0x30, 0xf2, 0x30, 0xf3, 0x30, 0xf4, 0x30, 0xf5, 0x30, 0xf6, 0x30, 0x7d, 0xe7, 0x7e, 0xe7, 0x7f, 0xe7, 0x80, 0xe7, 0x81, 0xe7, 0x82, 0xe7, 0x83, 0xe7, 0x84, 0xe7, 0x91, 0x03, 0x92, 0x03, 0x93, 0x03, 0x94, 0x03, 0x95, 0x03, 0x96, 0x03, 0x97, 0x03, 0x98, 0x03, 0x99, 0x03, 0x9a, 0x03, 0x9b, 0x03, 0x9c, 0x03, 0x9d, 0x03, 0x9e, 0x03, 0x9f, 0x03, 0xa0, 0x03, 0xa1, 0x03, 0xa3, 0x03, 0xa4, 0x03, 0xa5, 0x03, 0xa6, 0x03, 0xa7, 0x03, 0xa8, 0x03, 0xa9, 0x03, 0x85, 0xe7, 0x86, 0xe7, 0x87, 0xe7, 0x88, 0xe7, 0x89, 0xe7, 0x8a, 0xe7, 0x8b, 0xe7, 0x8c, 0xe7, 0xb1, 0x03, 0xb2, 0x03, 0xb3, 0x03, 0xb4, 0x03, 0xb5, 0x03, 0xb6, 0x03, 0xb7, 0x03, 0xb8, 0x03, 0xb9, 0x03, 0xba, 0x03, 0xbb, 0x03, 0xbc, 0x03, 0xbd, 0x03, 0xbe, 0x03, 0xbf, 0x03, 0xc0, 0x03, 0xc1, 0x03, 0xc3, 0x03, 0xc4, 0x03, 0xc5, 0x03, 0xc6, 0x03, 0xc7, 0x03, 0xc8, 0x03, 0xc9, 0x03, 0x8d, 0xe7, 0x8e, 0xe7, 0x8f, 0xe7, 0x90, 0xe7, 0x91, 0xe7, 0x92, 0xe7, 0x93, 0xe7, 0x35, 0xfe, 0x36, 0xfe, 0x39, 0xfe, 0x3a, 0xfe, 0x3f, 0xfe, 0x40, 0xfe, 0x3d, 0xfe, 0x3e, 0xfe, 0x41, 0xfe, 0x42, 0xfe, 0x43, 0xfe, 0x44, 0xfe, 0x94, 0xe7, 0x95, 0xe7, 0x3b, 0xfe, 0x3c, 0xfe, 0x37, 0xfe, 0x38, 0xfe, 0x31, 0xfe, 0x96, 0xe7, 0x33, 0xfe, 0x34, 0xfe, 0x97, 0xe7, 0x98, 0xe7, 0x99, 0xe7, 0x9a, 0xe7, 0x9b, 0xe7, 0x9c, 0xe7, 0x9d, 0xe7, 0x9e, 0xe7, 0x9f, 0xe7, 0x10, 0x04, 0x11, 0x04, 0x12, 0x04, 0x13, 0x04, 0x14, 0x04, 0x15, 0x04, 0x01, 0x04, 0x16, 0x04, 0x17, 0x04, 0x18, 0x04, 0x19, 0x04, 0x1a, 0x04, 0x1b, 0x04, 0x1c, 0x04, 0x1d, 0x04, 0x1e, 0x04, 0x1f, 0x04, 0x20, 0x04, 0x21, 0x04, 0x22, 0x04, 0x23, 0x04, 0x24, 0x04, 0x25, 0x04, 0x26, 0x04, 0x27, 0x04, 0x28, 0x04, 0x29, 0x04, 0x2a, 0x04, 0x2b, 0x04, 0x2c, 0x04, 0x2d, 0x04, 0x2e, 0x04, 0x2f, 0x04, 0xa0, 0xe7, 0xa1, 0xe7, 0xa2, 0xe7, 0xa3, 0xe7, 0xa4, 0xe7, 0xa5, 0xe7, 0xa6, 0xe7, 0xa7, 0xe7, 0xa8, 0xe7, 0xa9, 0xe7, 0xaa, 0xe7, 0xab, 0xe7, 0xac, 0xe7, 0xad, 0xe7, 0xae, 0xe7, 0x30, 0x04, 0x31, 0x04, 0x32, 0x04, 0x33, 0x04, 0x34, 0x04, 0x35, 0x04, 0x51, 0x04, 0x36, 0x04, 0x37, 0x04, 0x38, 0x04, 0x39, 0x04, 0x3a, 0x04, 0x3b, 0x04, 0x3c, 0x04, 0x3d, 0x04, 0x3e, 0x04, 0x3f, 0x04, 0x40, 0x04, 0x41, 0x04, 0x42, 0x04, 0x43, 0x04, 0x44, 0x04, 0x45, 0x04, 0x46, 0x04, 0x47, 0x04, 0x48, 0x04, 0x49, 0x04, 0x4a, 0x04, 0x4b, 0x04, 0x4c, 0x04, 0x4d, 0x04, 0x4e, 0x04, 0x4f, 0x04, 0xaf, 0xe7, 0xb0, 0xe7, 0xb1, 0xe7, 0xb2, 0xe7, 0xb3, 0xe7, 0xb4, 0xe7, 0xb5, 0xe7, 0xb6, 0xe7, 0xb7, 0xe7, 0xb8, 0xe7, 0xb9, 0xe7, 0xba, 0xe7, 0xbb, 0xe7, 0x01, 0x01, 0xe1, 0x00, 0xce, 0x01, 0xe0, 0x00, 0x13, 0x01, 0xe9, 0x00, 0x1b, 0x01, 0xe8, 0x00, 0x2b, 0x01, 0xed, 0x00, 0xd0, 0x01, 0xec, 0x00, 0x4d, 0x01, 0xf3, 0x00, 0xd2, 0x01, 0xf2, 0x00, 0x6b, 0x01, 0xfa, 0x00, 0xd4, 0x01, 0xf9, 0x00, 0xd6, 0x01, 0xd8, 0x01, 0xda, 0x01, 0xdc, 0x01, 0xfc, 0x00, 0xea, 0x00, 0x51, 0x02, 0xc7, 0xe7, 0x44, 0x01, 0x48, 0x01, 0xc8, 0xe7, 0x61, 0x02, 0xc9, 0xe7, 0xca, 0xe7, 0xcb, 0xe7, 0xcc, 0xe7, 0x05, 0x31, 0x06, 0x31, 0x07, 0x31, 0x08, 0x31, 0x09, 0x31, 0x0a, 0x31, 0x0b, 0x31, 0x0c, 0x31, 0x0d, 0x31, 0x0e, 0x31, 0x0f, 0x31, 0x10, 0x31, 0x11, 0x31, 0x12, 0x31, 0x13, 0x31, 0x14, 0x31, 0x15, 0x31, 0x16, 0x31, 0x17, 0x31, 0x18, 0x31, 0x19, 0x31, 0x1a, 0x31, 0x1b, 0x31, 0x1c, 0x31, 0x1d, 0x31, 0x1e, 0x31, 0x1f, 0x31, 0x20, 0x31, 0x21, 0x31, 0x22, 0x31, 0x23, 0x31, 0x24, 0x31, 0x25, 0x31, 0x26, 0x31, 0x27, 0x31, 0x28, 0x31, 0x29, 0x31, 0xcd, 0xe7, 0xce, 0xe7, 0xcf, 0xe7, 0xd0, 0xe7, 0xd1, 0xe7, 0xd2, 0xe7, 0xd3, 0xe7, 0xd4, 0xe7, 0xd5, 0xe7, 0xd6, 0xe7, 0xd7, 0xe7, 0xd8, 0xe7, 0xd9, 0xe7, 0xda, 0xe7, 0xdb, 0xe7, 0xdc, 0xe7, 0xdd, 0xe7, 0xde, 0xe7, 0xdf, 0xe7, 0xe0, 0xe7, 0xe1, 0xe7, 0xfe, 0xe7, 0xff, 0xe7, 0x00, 0xe8, 0x00, 0x25, 0x01, 0x25, 0x02, 0x25, 0x03, 0x25, 0x04, 0x25, 0x05, 0x25, 0x06, 0x25, 0x07, 0x25, 0x08, 0x25, 0x09, 0x25, 0x0a, 0x25, 0x0b, 0x25, 0x0c, 0x25, 0x0d, 0x25, 0x0e, 0x25, 0x0f, 0x25, 0x10, 0x25, 0x11, 0x25, 0x12, 0x25, 0x13, 0x25, 0x14, 0x25, 0x15, 0x25, 0x16, 0x25, 0x17, 0x25, 0x18, 0x25, 0x19, 0x25, 0x1a, 0x25, 0x1b, 0x25, 0x1c, 0x25, 0x1d, 0x25, 0x1e, 0x25, 0x1f, 0x25, 0x20, 0x25, 0x21, 0x25, 0x22, 0x25, 0x23, 0x25, 0x24, 0x25, 0x25, 0x25, 0x26, 0x25, 0x27, 0x25, 0x28, 0x25, 0x29, 0x25, 0x2a, 0x25, 0x2b, 0x25, 0x2c, 0x25, 0x2d, 0x25, 0x2e, 0x25, 0x2f, 0x25, 0x30, 0x25, 0x31, 0x25, 0x32, 0x25, 0x33, 0x25, 0x34, 0x25, 0x35, 0x25, 0x36, 0x25, 0x37, 0x25, 0x38, 0x25, 0x39, 0x25, 0x3a, 0x25, 0x3b, 0x25, 0x3c, 0x25, 0x3d, 0x25, 0x3e, 0x25, 0x3f, 0x25, 0x40, 0x25, 0x41, 0x25, 0x42, 0x25, 0x43, 0x25, 0x44, 0x25, 0x45, 0x25, 0x46, 0x25, 0x47, 0x25, 0x48, 0x25, 0x49, 0x25, 0x4a, 0x25, 0x4b, 0x25, 0x01, 0xe8, 0x02, 0xe8, 0x03, 0xe8, 0x04, 0xe8, 0x05, 0xe8, 0x06, 0xe8, 0x07, 0xe8, 0x08, 0xe8, 0x09, 0xe8, 0x0a, 0xe8, 0x0b, 0xe8, 0x0c, 0xe8, 0x0d, 0xe8, 0x0e, 0xe8, 0x0f, 0xe8, 0x4a, 0x55, 0x3f, 0x96, 0xc3, 0x57, 0x28, 0x63, 0xce, 0x54, 0x09, 0x55, 0xc0, 0x54, 0x91, 0x76, 0x4c, 0x76, 0x3c, 0x85, 0xee, 0x77, 0x7e, 0x82, 0x8d, 0x78, 0x31, 0x72, 0x98, 0x96, 0x8d, 0x97, 0x28, 0x6c, 0x89, 0x5b, 0xfa, 0x4f, 0x09, 0x63, 0x97, 0x66, 0xb8, 0x5c, 0xfa, 0x80, 0x48, 0x68, 0xae, 0x80, 0x02, 0x66, 0xce, 0x76, 0xf9, 0x51, 0x56, 0x65, 0xac, 0x71, 0xf1, 0x7f, 0x84, 0x88, 0xb2, 0x50, 0x65, 0x59, 0xca, 0x61, 0xb3, 0x6f, 0xad, 0x82, 0x4c, 0x63, 0x52, 0x62, 0xed, 0x53, 0x27, 0x54, 0x06, 0x7b, 0x6b, 0x51, 0xa4, 0x75, 0xf4, 0x5d, 0xd4, 0x62, 0xcb, 0x8d, 0x76, 0x97, 0x8a, 0x62, 0x19, 0x80, 0x5d, 0x57, 0x38, 0x97, 0x62, 0x7f, 0x38, 0x72, 0x7d, 0x76, 0xcf, 0x67, 0x7e, 0x76, 0x46, 0x64, 0x70, 0x4f, 0x25, 0x8d, 0xdc, 0x62, 0x17, 0x7a, 0x91, 0x65, 0xed, 0x73, 0x2c, 0x64, 0x73, 0x62, 0x2c, 0x82, 0x81, 0x98, 0x7f, 0x67, 0x48, 0x72, 0x6e, 0x62, 0xcc, 0x62, 0x34, 0x4f, 0xe3, 0x74, 0x4a, 0x53, 0x9e, 0x52, 0xca, 0x7e, 0xa6, 0x90, 0x2e, 0x5e, 0x86, 0x68, 0x9c, 0x69, 0x80, 0x81, 0xd1, 0x7e, 0xd2, 0x68, 0xc5, 0x78, 0x8c, 0x86, 0x51, 0x95, 0x8d, 0x50, 0x24, 0x8c, 0xde, 0x82, 0xde, 0x80, 0x05, 0x53, 0x12, 0x89, 0x65, 0x52, 0x84, 0x85, 0xf9, 0x96, 0xdd, 0x4f, 0x21, 0x58, 0x71, 0x99, 0x9d, 0x5b, 0xb1, 0x62, 0xa5, 0x62, 0xb4, 0x66, 0x79, 0x8c, 0x8d, 0x9c, 0x06, 0x72, 0x6f, 0x67, 0x91, 0x78, 0xb2, 0x60, 0x51, 0x53, 0x17, 0x53, 0x88, 0x8f, 0xcc, 0x80, 0x1d, 0x8d, 0xa1, 0x94, 0x0d, 0x50, 0xc8, 0x72, 0x07, 0x59, 0xeb, 0x60, 0x19, 0x71, 0xab, 0x88, 0x54, 0x59, 0xef, 0x82, 0x2c, 0x67, 0x28, 0x7b, 0x29, 0x5d, 0xf7, 0x7e, 0x2d, 0x75, 0xf5, 0x6c, 0x66, 0x8e, 0xf8, 0x8f, 0x3c, 0x90, 0x3b, 0x9f, 0xd4, 0x6b, 0x19, 0x91, 0x14, 0x7b, 0x7c, 0x5f, 0xa7, 0x78, 0xd6, 0x84, 0x3d, 0x85, 0xd5, 0x6b, 0xd9, 0x6b, 0xd6, 0x6b, 0x01, 0x5e, 0x87, 0x5e, 0xf9, 0x75, 0xed, 0x95, 0x5d, 0x65, 0x0a, 0x5f, 0xc5, 0x5f, 0x9f, 0x8f, 0xc1, 0x58, 0xc2, 0x81, 0x7f, 0x90, 0x5b, 0x96, 0xad, 0x97, 0xb9, 0x8f, 0x16, 0x7f, 0x2c, 0x8d, 0x41, 0x62, 0xbf, 0x4f, 0xd8, 0x53, 0x5e, 0x53, 0xa8, 0x8f, 0xa9, 0x8f, 0xab, 0x8f, 0x4d, 0x90, 0x07, 0x68, 0x6a, 0x5f, 0x98, 0x81, 0x68, 0x88, 0xd6, 0x9c, 0x8b, 0x61, 0x2b, 0x52, 0x2a, 0x76, 0x6c, 0x5f, 0x8c, 0x65, 0xd2, 0x6f, 0xe8, 0x6e, 0xbe, 0x5b, 0x48, 0x64, 0x75, 0x51, 0xb0, 0x51, 0xc4, 0x67, 0x19, 0x4e, 0xc9, 0x79, 0x7c, 0x99, 0xb3, 0x70, 0xc5, 0x75, 0x76, 0x5e, 0xbb, 0x73, 0xe0, 0x83, 0xad, 0x64, 0xe8, 0x62, 0xb5, 0x94, 0xe2, 0x6c, 0x5a, 0x53, 0xc3, 0x52, 0x0f, 0x64, 0xc2, 0x94, 0x94, 0x7b, 0x2f, 0x4f, 0x1b, 0x5e, 0x36, 0x82, 0x16, 0x81, 0x8a, 0x81, 0x24, 0x6e, 0xca, 0x6c, 0x73, 0x9a, 0x55, 0x63, 0x5c, 0x53, 0xfa, 0x54, 0x65, 0x88, 0xe0, 0x57, 0x0d, 0x4e, 0x03, 0x5e, 0x65, 0x6b, 0x3f, 0x7c, 0xe8, 0x90, 0x16, 0x60, 0xe6, 0x64, 0x1c, 0x73, 0xc1, 0x88, 0x50, 0x67, 0x4d, 0x62, 0x22, 0x8d, 0x6c, 0x77, 0x29, 0x8e, 0xc7, 0x91, 0x69, 0x5f, 0xdc, 0x83, 0x21, 0x85, 0x10, 0x99, 0xc2, 0x53, 0x95, 0x86, 0x8b, 0x6b, 0xed, 0x60, 0xe8, 0x60, 0x7f, 0x70, 0xcd, 0x82, 0x31, 0x82, 0xd3, 0x4e, 0xa7, 0x6c, 0xcf, 0x85, 0xcd, 0x64, 0xd9, 0x7c, 0xfd, 0x69, 0xf9, 0x66, 0x49, 0x83, 0x95, 0x53, 0x56, 0x7b, 0xa7, 0x4f, 0x8c, 0x51, 0x4b, 0x6d, 0x42, 0x5c, 0x6d, 0x8e, 0xd2, 0x63, 0xc9, 0x53, 0x2c, 0x83, 0x36, 0x83, 0xe5, 0x67, 0xb4, 0x78, 0x3d, 0x64, 0xdf, 0x5b, 0x94, 0x5c, 0xee, 0x5d, 0xe7, 0x8b, 0xc6, 0x62, 0xf4, 0x67, 0x7a, 0x8c, 0x00, 0x64, 0xba, 0x63, 0x49, 0x87, 0x8b, 0x99, 0x17, 0x8c, 0x20, 0x7f, 0xf2, 0x94, 0xa7, 0x4e, 0x10, 0x96, 0xa4, 0x98, 0x0c, 0x66, 0x16, 0x73, 0x3a, 0x57, 0x1d, 0x5c, 0x38, 0x5e, 0x7f, 0x95, 0x7f, 0x50, 0xa0, 0x80, 0x82, 0x53, 0x5e, 0x65, 0x45, 0x75, 0x31, 0x55, 0x21, 0x50, 0x85, 0x8d, 0x84, 0x62, 0x9e, 0x94, 0x1d, 0x67, 0x32, 0x56, 0x6e, 0x6f, 0xe2, 0x5d, 0x35, 0x54, 0x92, 0x70, 0x66, 0x8f, 0x6f, 0x62, 0xa4, 0x64, 0xa3, 0x63, 0x7b, 0x5f, 0x88, 0x6f, 0xf4, 0x90, 0xe3, 0x81, 0xb0, 0x8f, 0x18, 0x5c, 0x68, 0x66, 0xf1, 0x5f, 0x89, 0x6c, 0x48, 0x96, 0x81, 0x8d, 0x6c, 0x88, 0x91, 0x64, 0xf0, 0x79, 0xce, 0x57, 0x59, 0x6a, 0x10, 0x62, 0x48, 0x54, 0x58, 0x4e, 0x0b, 0x7a, 0xe9, 0x60, 0x84, 0x6f, 0xda, 0x8b, 0x7f, 0x62, 0x1e, 0x90, 0x8b, 0x9a, 0xe4, 0x79, 0x03, 0x54, 0xf4, 0x75, 0x01, 0x63, 0x19, 0x53, 0x60, 0x6c, 0xdf, 0x8f, 0x1b, 0x5f, 0x70, 0x9a, 0x3b, 0x80, 0x7f, 0x9f, 0x88, 0x4f, 0x3a, 0x5c, 0x64, 0x8d, 0xc5, 0x7f, 0xa5, 0x65, 0xbd, 0x70, 0x45, 0x51, 0xb2, 0x51, 0x6b, 0x86, 0x07, 0x5d, 0xa0, 0x5b, 0xbd, 0x62, 0x6c, 0x91, 0x74, 0x75, 0x0c, 0x8e, 0x20, 0x7a, 0x01, 0x61, 0x79, 0x7b, 0xc7, 0x4e, 0xf8, 0x7e, 0x85, 0x77, 0x11, 0x4e, 0xed, 0x81, 0x1d, 0x52, 0xfa, 0x51, 0x71, 0x6a, 0xa8, 0x53, 0x87, 0x8e, 0x04, 0x95, 0xcf, 0x96, 0xc1, 0x6e, 0x64, 0x96, 0x5a, 0x69, 0x40, 0x78, 0xa8, 0x50, 0xd7, 0x77, 0x10, 0x64, 0xe6, 0x89, 0x04, 0x59, 0xe3, 0x63, 0xdd, 0x5d, 0x7f, 0x7a, 0x3d, 0x69, 0x20, 0x4f, 0x39, 0x82, 0x98, 0x55, 0x32, 0x4e, 0xae, 0x75, 0x97, 0x7a, 0x62, 0x5e, 0x8a, 0x5e, 0xef, 0x95, 0x1b, 0x52, 0x39, 0x54, 0x8a, 0x70, 0x76, 0x63, 0x24, 0x95, 0x82, 0x57, 0x25, 0x66, 0x3f, 0x69, 0x87, 0x91, 0x07, 0x55, 0xf3, 0x6d, 0xaf, 0x7e, 0x22, 0x88, 0x33, 0x62, 0xf0, 0x7e, 0xb5, 0x75, 0x28, 0x83, 0xc1, 0x78, 0xcc, 0x96, 0x9e, 0x8f, 0x48, 0x61, 0xf7, 0x74, 0xcd, 0x8b, 0x64, 0x6b, 0x3a, 0x52, 0x50, 0x8d, 0x21, 0x6b, 0x6a, 0x80, 0x71, 0x84, 0xf1, 0x56, 0x06, 0x53, 0xce, 0x4e, 0x1b, 0x4e, 0xd1, 0x51, 0x97, 0x7c, 0x8b, 0x91, 0x07, 0x7c, 0xc3, 0x4f, 0x7f, 0x8e, 0xe1, 0x7b, 0x9c, 0x7a, 0x67, 0x64, 0x14, 0x5d, 0xac, 0x50, 0x06, 0x81, 0x01, 0x76, 0xb9, 0x7c, 0xec, 0x6d, 0xe0, 0x7f, 0x51, 0x67, 0x58, 0x5b, 0xf8, 0x5b, 0xcb, 0x78, 0xae, 0x64, 0x13, 0x64, 0xaa, 0x63, 0x2b, 0x63, 0x19, 0x95, 0x2d, 0x64, 0xbe, 0x8f, 0x54, 0x7b, 0x29, 0x76, 0x53, 0x62, 0x27, 0x59, 0x46, 0x54, 0x79, 0x6b, 0xa3, 0x50, 0x34, 0x62, 0x26, 0x5e, 0x86, 0x6b, 0xe3, 0x4e, 0x37, 0x8d, 0x8b, 0x88, 0x85, 0x5f, 0x2e, 0x90, 0x20, 0x60, 0x3d, 0x80, 0xc5, 0x62, 0x39, 0x4e, 0x55, 0x53, 0xf8, 0x90, 0xb8, 0x63, 0xc6, 0x80, 0xe6, 0x65, 0x2e, 0x6c, 0x46, 0x4f, 0xee, 0x60, 0xe1, 0x6d, 0xde, 0x8b, 0x39, 0x5f, 0xcb, 0x86, 0x53, 0x5f, 0x21, 0x63, 0x5a, 0x51, 0x61, 0x83, 0x63, 0x68, 0x00, 0x52, 0x63, 0x63, 0x48, 0x8e, 0x12, 0x50, 0x9b, 0x5c, 0x77, 0x79, 0xfc, 0x5b, 0x30, 0x52, 0x3b, 0x7a, 0xbc, 0x60, 0x53, 0x90, 0xd7, 0x76, 0xb7, 0x5f, 0x97, 0x5f, 0x84, 0x76, 0x6c, 0x8e, 0x6f, 0x70, 0x7b, 0x76, 0x49, 0x7b, 0xaa, 0x77, 0xf3, 0x51, 0x93, 0x90, 0x24, 0x58, 0x4e, 0x4f, 0xf4, 0x6e, 0xea, 0x8f, 0x4c, 0x65, 0x1b, 0x7b, 0xc4, 0x72, 0xa4, 0x6d, 0xdf, 0x7f, 0xe1, 0x5a, 0xb5, 0x62, 0x95, 0x5e, 0x30, 0x57, 0x82, 0x84, 0x2c, 0x7b, 0x1d, 0x5e, 0x1f, 0x5f, 0x12, 0x90, 0x14, 0x7f, 0xa0, 0x98, 0x82, 0x63, 0xc7, 0x6e, 0x98, 0x78, 0xb9, 0x70, 0x78, 0x51, 0x5b, 0x97, 0xab, 0x57, 0x35, 0x75, 0x43, 0x4f, 0x38, 0x75, 0x97, 0x5e, 0xe6, 0x60, 0x60, 0x59, 0xc0, 0x6d, 0xbf, 0x6b, 0x89, 0x78, 0xfc, 0x53, 0xd5, 0x96, 0xcb, 0x51, 0x01, 0x52, 0x89, 0x63, 0x0a, 0x54, 0x93, 0x94, 0x03, 0x8c, 0xcc, 0x8d, 0x39, 0x72, 0x9f, 0x78, 0x76, 0x87, 0xed, 0x8f, 0x0d, 0x8c, 0xe0, 0x53, 0x01, 0x4e, 0xef, 0x76, 0xee, 0x53, 0x89, 0x94, 0x76, 0x98, 0x0e, 0x9f, 0x2d, 0x95, 0x9a, 0x5b, 0xa2, 0x8b, 0x22, 0x4e, 0x1c, 0x4e, 0xac, 0x51, 0x63, 0x84, 0xc2, 0x61, 0xa8, 0x52, 0x0b, 0x68, 0x97, 0x4f, 0x6b, 0x60, 0xbb, 0x51, 0x1e, 0x6d, 0x5c, 0x51, 0x96, 0x62, 0x97, 0x65, 0x61, 0x96, 0x46, 0x8c, 0x17, 0x90, 0xd8, 0x75, 0xfd, 0x90, 0x63, 0x77, 0xd2, 0x6b, 0x8a, 0x72, 0xec, 0x72, 0xfb, 0x8b, 0x35, 0x58, 0x79, 0x77, 0x4c, 0x8d, 0x5c, 0x67, 0x40, 0x95, 0x9a, 0x80, 0xa6, 0x5e, 0x21, 0x6e, 0x92, 0x59, 0xef, 0x7a, 0xed, 0x77, 0x3b, 0x95, 0xb5, 0x6b, 0xad, 0x65, 0x0e, 0x7f, 0x06, 0x58, 0x51, 0x51, 0x1f, 0x96, 0xf9, 0x5b, 0xa9, 0x58, 0x28, 0x54, 0x72, 0x8e, 0x66, 0x65, 0x7f, 0x98, 0xe4, 0x56, 0x9d, 0x94, 0xfe, 0x76, 0x41, 0x90, 0x87, 0x63, 0xc6, 0x54, 0x1a, 0x59, 0x3a, 0x59, 0x9b, 0x57, 0xb2, 0x8e, 0x35, 0x67, 0xfa, 0x8d, 0x35, 0x82, 0x41, 0x52, 0xf0, 0x60, 0x15, 0x58, 0xfe, 0x86, 0xe8, 0x5c, 0x45, 0x9e, 0xc4, 0x4f, 0x9d, 0x98, 0xb9, 0x8b, 0x25, 0x5a, 0x76, 0x60, 0x84, 0x53, 0x7c, 0x62, 0x4f, 0x90, 0x02, 0x91, 0x7f, 0x99, 0x69, 0x60, 0x0c, 0x80, 0x3f, 0x51, 0x33, 0x80, 0x14, 0x5c, 0x75, 0x99, 0x31, 0x6d, 0x8c, 0x4e, 0x30, 0x8d, 0xd1, 0x53, 0x5a, 0x7f, 0x4f, 0x7b, 0x10, 0x4f, 0x4f, 0x4e, 0x00, 0x96, 0xd5, 0x6c, 0xd0, 0x73, 0xe9, 0x85, 0x06, 0x5e, 0x6a, 0x75, 0xfb, 0x7f, 0x0a, 0x6a, 0xfe, 0x77, 0x92, 0x94, 0x41, 0x7e, 0xe1, 0x51, 0xe6, 0x70, 0xcd, 0x53, 0xd4, 0x8f, 0x03, 0x83, 0x29, 0x8d, 0xaf, 0x72, 0x6d, 0x99, 0xdb, 0x6c, 0x4a, 0x57, 0xb3, 0x82, 0xb9, 0x65, 0xaa, 0x80, 0x3f, 0x62, 0x32, 0x96, 0xa8, 0x59, 0xff, 0x4e, 0xbf, 0x8b, 0xba, 0x7e, 0x3e, 0x65, 0xf2, 0x83, 0x5e, 0x97, 0x61, 0x55, 0xde, 0x98, 0xa5, 0x80, 0x2a, 0x53, 0xfd, 0x8b, 0x20, 0x54, 0xba, 0x80, 0x9f, 0x5e, 0xb8, 0x6c, 0x39, 0x8d, 0xac, 0x82, 0x5a, 0x91, 0x29, 0x54, 0x1b, 0x6c, 0x06, 0x52, 0xb7, 0x7e, 0x5f, 0x57, 0x1a, 0x71, 0x7e, 0x6c, 0x89, 0x7c, 0x4b, 0x59, 0xfd, 0x4e, 0xff, 0x5f, 0x24, 0x61, 0xaa, 0x7c, 0x30, 0x4e, 0x01, 0x5c, 0xab, 0x67, 0x02, 0x87, 0xf0, 0x5c, 0x0b, 0x95, 0xce, 0x98, 0xaf, 0x75, 0xfd, 0x70, 0x22, 0x90, 0xaf, 0x51, 0x1d, 0x7f, 0xbd, 0x8b, 0x49, 0x59, 0xe4, 0x51, 0x5b, 0x4f, 0x26, 0x54, 0x2b, 0x59, 0x77, 0x65, 0xa4, 0x80, 0x75, 0x5b, 0x76, 0x62, 0xc2, 0x62, 0x90, 0x8f, 0x45, 0x5e, 0x1f, 0x6c, 0x26, 0x7b, 0x0f, 0x4f, 0xd8, 0x4f, 0x0d, 0x67, 0x6e, 0x6d, 0xaa, 0x6d, 0x8f, 0x79, 0xb1, 0x88, 0x17, 0x5f, 0x2b, 0x75, 0x9a, 0x62, 0x85, 0x8f, 0xef, 0x4f, 0xdc, 0x91, 0xa7, 0x65, 0x2f, 0x81, 0x51, 0x81, 0x9c, 0x5e, 0x50, 0x81, 0x74, 0x8d, 0x6f, 0x52, 0x86, 0x89, 0x4b, 0x8d, 0x0d, 0x59, 0x85, 0x50, 0xd8, 0x4e, 0x1c, 0x96, 0x36, 0x72, 0x79, 0x81, 0x1f, 0x8d, 0xcc, 0x5b, 0xa3, 0x8b, 0x44, 0x96, 0x87, 0x59, 0x1a, 0x7f, 0x90, 0x54, 0x76, 0x56, 0x0e, 0x56, 0xe5, 0x8b, 0x39, 0x65, 0x82, 0x69, 0x99, 0x94, 0xd6, 0x76, 0x89, 0x6e, 0x72, 0x5e, 0x18, 0x75, 0x46, 0x67, 0xd1, 0x67, 0xff, 0x7a, 0x9d, 0x80, 0x76, 0x8d, 0x1f, 0x61, 0xc6, 0x79, 0x62, 0x65, 0x63, 0x8d, 0x88, 0x51, 0x1a, 0x52, 0xa2, 0x94, 0x38, 0x7f, 0x9b, 0x80, 0xb2, 0x7e, 0x97, 0x5c, 0x2f, 0x6e, 0x60, 0x67, 0xd9, 0x7b, 0x8b, 0x76, 0xd8, 0x9a, 0x8f, 0x81, 0x94, 0x7f, 0xd5, 0x7c, 0x1e, 0x64, 0x50, 0x95, 0x3f, 0x7a, 0x4a, 0x54, 0xe5, 0x54, 0x4c, 0x6b, 0x01, 0x64, 0x08, 0x62, 0x3d, 0x9e, 0xf3, 0x80, 0x99, 0x75, 0x72, 0x52, 0x69, 0x97, 0x5b, 0x84, 0x3c, 0x68, 0xe4, 0x86, 0x01, 0x96, 0x94, 0x96, 0xec, 0x94, 0x2a, 0x4e, 0x04, 0x54, 0xd9, 0x7e, 0x39, 0x68, 0xdf, 0x8d, 0x15, 0x80, 0xf4, 0x66, 0x9a, 0x5e, 0xb9, 0x7f, 0xc2, 0x57, 0x3f, 0x80, 0x97, 0x68, 0xe5, 0x5d, 0x3b, 0x65, 0x9f, 0x52, 0x6d, 0x60, 0x9a, 0x9f, 0x9b, 0x4f, 0xac, 0x8e, 0x6c, 0x51, 0xab, 0x5b, 0x13, 0x5f, 0xe9, 0x5d, 0x5e, 0x6c, 0xf1, 0x62, 0x21, 0x8d, 0x71, 0x51, 0xa9, 0x94, 0xfe, 0x52, 0x9f, 0x6c, 0xdf, 0x82, 0xd7, 0x72, 0xa2, 0x57, 0x84, 0x67, 0x2d, 0x8d, 0x1f, 0x59, 0x9c, 0x8f, 0xc7, 0x83, 0x95, 0x54, 0x8d, 0x7b, 0x30, 0x4f, 0xbd, 0x6c, 0x64, 0x5b, 0xd1, 0x59, 0x13, 0x9f, 0xe4, 0x53, 0xca, 0x86, 0xa8, 0x9a, 0x37, 0x8c, 0xa1, 0x80, 0x45, 0x65, 0x7e, 0x98, 0xfa, 0x56, 0xc7, 0x96, 0x2e, 0x52, 0xdc, 0x74, 0x50, 0x52, 0xe1, 0x5b, 0x02, 0x63, 0x02, 0x89, 0x56, 0x4e, 0xd0, 0x62, 0x2a, 0x60, 0xfa, 0x68, 0x73, 0x51, 0x98, 0x5b, 0xa0, 0x51, 0xc2, 0x89, 0xa1, 0x7b, 0x86, 0x99, 0x50, 0x7f, 0xef, 0x60, 0x4c, 0x70, 0x2f, 0x8d, 0x49, 0x51, 0x7f, 0x5e, 0x1b, 0x90, 0x70, 0x74, 0xc4, 0x89, 0x2d, 0x57, 0x45, 0x78, 0x52, 0x5f, 0x9f, 0x9f, 0xfa, 0x95, 0x68, 0x8f, 0x3c, 0x9b, 0xe1, 0x8b, 0x78, 0x76, 0x42, 0x68, 0xdc, 0x67, 0xea, 0x8d, 0x35, 0x8d, 0x3d, 0x52, 0x8a, 0x8f, 0xda, 0x6e, 0xcd, 0x68, 0x05, 0x95, 0xed, 0x90, 0xfd, 0x56, 0x9c, 0x67, 0xf9, 0x88, 0xc7, 0x8f, 0xc8, 0x54, 0xb8, 0x9a, 0x69, 0x5b, 0x77, 0x6d, 0x26, 0x6c, 0xa5, 0x4e, 0xb3, 0x5b, 0x87, 0x9a, 0x63, 0x91, 0xa8, 0x61, 0xaf, 0x90, 0xe9, 0x97, 0x2b, 0x54, 0xb5, 0x6d, 0xd2, 0x5b, 0xfd, 0x51, 0x8a, 0x55, 0x55, 0x7f, 0xf0, 0x7f, 0xbc, 0x64, 0x4d, 0x63, 0xf1, 0x65, 0xbe, 0x61, 0x8d, 0x60, 0x0a, 0x71, 0x57, 0x6c, 0x49, 0x6c, 0x2f, 0x59, 0x6d, 0x67, 0x2a, 0x82, 0xd5, 0x58, 0x8e, 0x56, 0x6a, 0x8c, 0xeb, 0x6b, 0xdd, 0x90, 0x7d, 0x59, 0x17, 0x80, 0xf7, 0x53, 0x69, 0x6d, 0x75, 0x54, 0x9d, 0x55, 0x77, 0x83, 0xcf, 0x83, 0x38, 0x68, 0xbe, 0x79, 0x8c, 0x54, 0x55, 0x4f, 0x08, 0x54, 0xd2, 0x76, 0x89, 0x8c, 0x02, 0x96, 0xb3, 0x6c, 0xb8, 0x6d, 0x6b, 0x8d, 0x10, 0x89, 0x64, 0x9e, 0x3a, 0x8d, 0x3f, 0x56, 0xd1, 0x9e, 0xd5, 0x75, 0x88, 0x5f, 0xe0, 0x72, 0x68, 0x60, 0xfc, 0x54, 0xa8, 0x4e, 0x2a, 0x6a, 0x61, 0x88, 0x52, 0x60, 0x70, 0x8f, 0xc4, 0x54, 0xd8, 0x70, 0x79, 0x86, 0x3f, 0x9e, 0x2a, 0x6d, 0x8f, 0x5b, 0x18, 0x5f, 0xa2, 0x7e, 0x89, 0x55, 0xaf, 0x4f, 0x34, 0x73, 0x3c, 0x54, 0x9a, 0x53, 0x19, 0x50, 0x0e, 0x54, 0x7c, 0x54, 0x4e, 0x4e, 0xfd, 0x5f, 0x5a, 0x74, 0xf6, 0x58, 0x6b, 0x84, 0xe1, 0x80, 0x74, 0x87, 0xd0, 0x72, 0xca, 0x7c, 0x56, 0x6e, 0x27, 0x5f, 0x4e, 0x86, 0x2c, 0x55, 0xa4, 0x62, 0x92, 0x4e, 0xaa, 0x6c, 0x37, 0x62, 0xb1, 0x82, 0xd7, 0x54, 0x4e, 0x53, 0x3e, 0x73, 0xd1, 0x6e, 0x3b, 0x75, 0x12, 0x52, 0x16, 0x53, 0xdd, 0x8b, 0xd0, 0x69, 0x8a, 0x5f, 0x00, 0x60, 0xee, 0x6d, 0x4f, 0x57, 0x22, 0x6b, 0xaf, 0x73, 0x53, 0x68, 0xd8, 0x8f, 0x13, 0x7f, 0x62, 0x63, 0xa3, 0x60, 0x24, 0x55, 0xea, 0x75, 0x62, 0x8c, 0x15, 0x71, 0xa3, 0x6d, 0xa6, 0x5b, 0x7b, 0x5e, 0x52, 0x83, 0x4c, 0x61, 0xc4, 0x9e, 0xfa, 0x78, 0x57, 0x87, 0x27, 0x7c, 0x87, 0x76, 0xf0, 0x51, 0xf6, 0x60, 0x4c, 0x71, 0x43, 0x66, 0x4c, 0x5e, 0x4d, 0x60, 0x0e, 0x8c, 0x70, 0x70, 0x25, 0x63, 0x89, 0x8f, 0xbd, 0x5f, 0x62, 0x60, 0xd4, 0x86, 0xde, 0x56, 0xc1, 0x6b, 0x94, 0x60, 0x67, 0x61, 0x49, 0x53, 0xe0, 0x60, 0x66, 0x66, 0x3f, 0x8d, 0xfd, 0x79, 0x1a, 0x4f, 0xe9, 0x70, 0x47, 0x6c, 0xb3, 0x8b, 0xf2, 0x8b, 0xd8, 0x7e, 0x64, 0x83, 0x0f, 0x66, 0x5a, 0x5a, 0x42, 0x9b, 0x51, 0x6d, 0xf7, 0x6d, 0x41, 0x8c, 0x3b, 0x6d, 0x19, 0x4f, 0x6b, 0x70, 0xb7, 0x83, 0x16, 0x62, 0xd1, 0x60, 0x0d, 0x97, 0x27, 0x8d, 0x78, 0x79, 0xfb, 0x51, 0x3e, 0x57, 0xfa, 0x57, 0x3a, 0x67, 0x78, 0x75, 0x3d, 0x7a, 0xef, 0x79, 0x95, 0x7b, 0x8c, 0x80, 0x65, 0x99, 0xf9, 0x8f, 0xc0, 0x6f, 0xa5, 0x8b, 0x21, 0x9e, 0xec, 0x59, 0xe9, 0x7e, 0x09, 0x7f, 0x09, 0x54, 0x81, 0x67, 0xd8, 0x68, 0x91, 0x8f, 0x4d, 0x7c, 0xc6, 0x96, 0xca, 0x53, 0x25, 0x60, 0xbe, 0x75, 0x72, 0x6c, 0x73, 0x53, 0xc9, 0x5a, 0xa7, 0x7e, 0x24, 0x63, 0xe0, 0x51, 0x0a, 0x81, 0xf1, 0x5d, 0xdf, 0x84, 0x80, 0x62, 0x80, 0x51, 0x63, 0x5b, 0x0e, 0x4f, 0x6d, 0x79, 0x42, 0x52, 0xb8, 0x60, 0x4e, 0x6d, 0xc4, 0x5b, 0xc2, 0x5b, 0xa1, 0x8b, 0xb0, 0x8b, 0xe2, 0x65, 0xcc, 0x5f, 0x45, 0x96, 0x93, 0x59, 0xe7, 0x7e, 0xaa, 0x7e, 0x09, 0x56, 0xb7, 0x67, 0x39, 0x59, 0x73, 0x4f, 0xb6, 0x5b, 0xa0, 0x52, 0x5a, 0x83, 0x8a, 0x98, 0x3e, 0x8d, 0x32, 0x75, 0xbe, 0x94, 0x47, 0x50, 0x3c, 0x7a, 0xf7, 0x4e, 0xb6, 0x67, 0x7e, 0x9a, 0xc1, 0x5a, 0x7c, 0x6b, 0xd1, 0x76, 0x5a, 0x57, 0x16, 0x5c, 0x3a, 0x7b, 0xf4, 0x95, 0x4e, 0x71, 0x7c, 0x51, 0xa9, 0x80, 0x70, 0x82, 0x78, 0x59, 0x04, 0x7f, 0x27, 0x83, 0xc0, 0x68, 0xec, 0x67, 0xb1, 0x78, 0x77, 0x78, 0xe3, 0x62, 0x61, 0x63, 0x80, 0x7b, 0xed, 0x4f, 0x6a, 0x52, 0xcf, 0x51, 0x50, 0x83, 0xdb, 0x69, 0x74, 0x92, 0xf5, 0x8d, 0x31, 0x8d, 0xc1, 0x89, 0x2e, 0x95, 0xad, 0x7b, 0xf6, 0x4e, 0x65, 0x50, 0x30, 0x82, 0x51, 0x52, 0x6f, 0x99, 0x10, 0x6e, 0x85, 0x6e, 0xa7, 0x6d, 0xfa, 0x5e, 0xf5, 0x50, 0xdc, 0x59, 0x06, 0x5c, 0x46, 0x6d, 0x5f, 0x6c, 0x86, 0x75, 0x8b, 0x84, 0x68, 0x68, 0x56, 0x59, 0xb2, 0x8b, 0x20, 0x53, 0x71, 0x91, 0x4d, 0x96, 0x49, 0x85, 0x12, 0x69, 0x01, 0x79, 0x26, 0x71, 0xf6, 0x80, 0xa4, 0x4e, 0xca, 0x90, 0x47, 0x6d, 0x84, 0x9a, 0x07, 0x5a, 0xbc, 0x56, 0x05, 0x64, 0xf0, 0x94, 0xeb, 0x77, 0xa5, 0x4f, 0x1a, 0x81, 0xe1, 0x72, 0xd2, 0x89, 0x7a, 0x99, 0x34, 0x7f, 0xde, 0x7e, 0x7f, 0x52, 0x59, 0x65, 0x75, 0x91, 0x7f, 0x8f, 0x83, 0x8f, 0xeb, 0x53, 0x96, 0x7a, 0xed, 0x63, 0xa5, 0x63, 0x86, 0x76, 0xf8, 0x79, 0x57, 0x88, 0x36, 0x96, 0x2a, 0x62, 0xab, 0x52, 0x82, 0x82, 0x54, 0x68, 0x70, 0x67, 0x77, 0x63, 0x6b, 0x77, 0xed, 0x7a, 0x01, 0x6d, 0xd3, 0x7e, 0xe3, 0x89, 0xd0, 0x59, 0x12, 0x62, 0xc9, 0x85, 0xa5, 0x82, 0x4c, 0x75, 0x1f, 0x50, 0xcb, 0x4e, 0xa5, 0x75, 0xeb, 0x8b, 0x4a, 0x5c, 0xfe, 0x5d, 0x4b, 0x7b, 0xa4, 0x65, 0xd1, 0x91, 0xca, 0x4e, 0x25, 0x6d, 0x5f, 0x89, 0x27, 0x7d, 0x26, 0x95, 0xc5, 0x4e, 0x28, 0x8c, 0xdb, 0x8f, 0x73, 0x97, 0x4b, 0x66, 0x81, 0x79, 0xd1, 0x8f, 0xec, 0x70, 0x78, 0x6d, 0x3d, 0x5c, 0xb2, 0x52, 0x46, 0x83, 0x62, 0x51, 0x0e, 0x83, 0x5b, 0x77, 0x76, 0x66, 0xb8, 0x9c, 0xac, 0x4e, 0xca, 0x60, 0xbe, 0x7c, 0xb3, 0x7c, 0xcf, 0x7e, 0x95, 0x4e, 0x66, 0x8b, 0x6f, 0x66, 0x88, 0x98, 0x59, 0x97, 0x83, 0x58, 0x6c, 0x65, 0x5c, 0x95, 0x84, 0x5f, 0xc9, 0x75, 0x56, 0x97, 0xdf, 0x7a, 0xde, 0x7a, 0xc0, 0x51, 0xaf, 0x70, 0x98, 0x7a, 0xea, 0x63, 0x76, 0x7a, 0xa0, 0x7e, 0x96, 0x73, 0xed, 0x97, 0x45, 0x4e, 0x78, 0x70, 0x5d, 0x4e, 0x52, 0x91, 0xa9, 0x53, 0x51, 0x65, 0xe7, 0x65, 0xfc, 0x81, 0x05, 0x82, 0x8e, 0x54, 0x31, 0x5c, 0x9a, 0x75, 0xa0, 0x97, 0xd8, 0x62, 0xd9, 0x72, 0xbd, 0x75, 0x45, 0x5c, 0x79, 0x9a, 0xca, 0x83, 0x40, 0x5c, 0x80, 0x54, 0xe9, 0x77, 0x3e, 0x4e, 0xae, 0x6c, 0x5a, 0x80, 0xd2, 0x62, 0x6e, 0x63, 0xe8, 0x5d, 0x77, 0x51, 0xdd, 0x8d, 0x1e, 0x8e, 0x2f, 0x95, 0xf1, 0x4f, 0xe5, 0x53, 0xe7, 0x60, 0xac, 0x70, 0x67, 0x52, 0x50, 0x63, 0x43, 0x9e, 0x1f, 0x5a, 0x26, 0x50, 0x37, 0x77, 0x77, 0x53, 0xe2, 0x7e, 0x85, 0x64, 0x2b, 0x65, 0x89, 0x62, 0x98, 0x63, 0x14, 0x50, 0x35, 0x72, 0xc9, 0x89, 0xb3, 0x51, 0xc0, 0x8b, 0xdd, 0x7e, 0x47, 0x57, 0xcc, 0x83, 0xa7, 0x94, 0x9b, 0x51, 0x1b, 0x54, 0xfb, 0x5c, 0xca, 0x4f, 0xe3, 0x7a, 0x5a, 0x6d, 0xe1, 0x90, 0x8f, 0x9a, 0x80, 0x55, 0x96, 0x54, 0x61, 0x53, 0xaf, 0x54, 0x00, 0x5f, 0xe9, 0x63, 0x77, 0x69, 0xef, 0x51, 0x68, 0x61, 0x0a, 0x52, 0x2a, 0x58, 0xd8, 0x52, 0x4e, 0x57, 0x0d, 0x78, 0x0b, 0x77, 0xb7, 0x5e, 0x77, 0x61, 0xe0, 0x7c, 0x5b, 0x62, 0x97, 0x62, 0xa2, 0x4e, 0x95, 0x70, 0x03, 0x80, 0xf7, 0x62, 0xe4, 0x70, 0x60, 0x97, 0x77, 0x57, 0xdb, 0x82, 0xef, 0x67, 0xf5, 0x68, 0xd5, 0x78, 0x97, 0x98, 0xd1, 0x79, 0xf3, 0x58, 0xb3, 0x54, 0xef, 0x53, 0x34, 0x6e, 0x4b, 0x51, 0x3b, 0x52, 0xa2, 0x5b, 0xfe, 0x8b, 0xaf, 0x80, 0x43, 0x55, 0xa6, 0x57, 0x73, 0x60, 0x51, 0x57, 0x2d, 0x54, 0x7a, 0x7a, 0x50, 0x60, 0x54, 0x5b, 0xa7, 0x63, 0xa0, 0x62, 0xe3, 0x53, 0x63, 0x62, 0xc7, 0x5b, 0xaf, 0x67, 0xed, 0x54, 0x9f, 0x7a, 0xe6, 0x82, 0x77, 0x91, 0x93, 0x5e, 0xe4, 0x88, 0x38, 0x59, 0xae, 0x57, 0x0e, 0x63, 0xe8, 0x8d, 0xef, 0x80, 0x57, 0x57, 0x77, 0x7b, 0xa9, 0x4f, 0xeb, 0x5f, 0xbd, 0x5b, 0x3e, 0x6b, 0x21, 0x53, 0x50, 0x7b, 0xc2, 0x72, 0x46, 0x68, 0xff, 0x77, 0x36, 0x77, 0xf7, 0x65, 0xb5, 0x51, 0x8f, 0x4e, 0xd4, 0x76, 0xbf, 0x5c, 0xa5, 0x7a, 0x75, 0x84, 0x4e, 0x59, 0x41, 0x9b, 0x80, 0x50, 0x88, 0x99, 0x27, 0x61, 0x83, 0x6e, 0x64, 0x57, 0x06, 0x66, 0x46, 0x63, 0xf0, 0x56, 0xec, 0x62, 0x69, 0x62, 0xd3, 0x5e, 0x14, 0x96, 0x83, 0x57, 0xc9, 0x62, 0x87, 0x55, 0x21, 0x87, 0x4a, 0x81, 0xa3, 0x8f, 0x66, 0x55, 0xb1, 0x83, 0x65, 0x67, 0x56, 0x8d, 0xdd, 0x84, 0x6a, 0x5a, 0x0f, 0x68, 0xe6, 0x62, 0xee, 0x7b, 0x11, 0x96, 0x70, 0x51, 0x9c, 0x6f, 0x30, 0x8c, 0xfd, 0x63, 0xc8, 0x89, 0xd2, 0x61, 0x06, 0x7f, 0xc2, 0x70, 0xe5, 0x6e, 0x05, 0x74, 0x94, 0x69, 0xfc, 0x72, 0xca, 0x5e, 0xce, 0x90, 0x17, 0x67, 0x6a, 0x6d, 0x5e, 0x63, 0xb3, 0x52, 0x62, 0x72, 0x01, 0x80, 0x6c, 0x4f, 0xe5, 0x59, 0x6a, 0x91, 0xd9, 0x70, 0x9d, 0x6d, 0xd2, 0x52, 0x50, 0x4e, 0xf7, 0x96, 0x6d, 0x95, 0x7e, 0x85, 0xca, 0x78, 0x2f, 0x7d, 0x21, 0x51, 0x92, 0x57, 0xc2, 0x64, 0x8b, 0x80, 0x7b, 0x7c, 0xea, 0x6c, 0xf1, 0x68, 0x5e, 0x69, 0xb7, 0x51, 0x98, 0x53, 0xa8, 0x68, 0x81, 0x72, 0xce, 0x9e, 0xf1, 0x7b, 0xf8, 0x72, 0xbb, 0x79, 0x13, 0x6f, 0x06, 0x74, 0x4e, 0x67, 0xcc, 0x91, 0xa4, 0x9c, 0x3c, 0x79, 0x89, 0x83, 0x54, 0x83, 0x0f, 0x54, 0x17, 0x68, 0x3d, 0x4e, 0x89, 0x53, 0xb1, 0x52, 0x3e, 0x78, 0x86, 0x53, 0x29, 0x52, 0x88, 0x50, 0x8b, 0x4f, 0xd0, 0x4f, 0xe2, 0x75, 0xcb, 0x7a, 0x92, 0x7c, 0xa5, 0x6c, 0xb6, 0x96, 0x9b, 0x52, 0x83, 0x74, 0xe9, 0x54, 0xe9, 0x4f, 0x54, 0x80, 0xb2, 0x83, 0xde, 0x8f, 0x70, 0x95, 0xc9, 0x5e, 0x1c, 0x60, 0x9f, 0x6d, 0x18, 0x5e, 0x5b, 0x65, 0x38, 0x81, 0xfe, 0x94, 0x4b, 0x60, 0xbc, 0x70, 0xc3, 0x7e, 0xae, 0x7c, 0xc9, 0x51, 0x81, 0x68, 0xb1, 0x7c, 0x6f, 0x82, 0x24, 0x4e, 0x86, 0x8f, 0xcf, 0x91, 0x7e, 0x66, 0xae, 0x4e, 0x05, 0x8c, 0xa9, 0x64, 0x4a, 0x80, 0xda, 0x50, 0x97, 0x75, 0xce, 0x71, 0xe5, 0x5b, 0xbd, 0x8f, 0x66, 0x6f, 0x86, 0x4e, 0x82, 0x64, 0x63, 0x95, 0xd6, 0x5e, 0x99, 0x65, 0x17, 0x52, 0xc2, 0x88, 0xc8, 0x70, 0xa3, 0x52, 0x0e, 0x73, 0x33, 0x74, 0x97, 0x67, 0xf7, 0x78, 0x16, 0x97, 0x34, 0x4e, 0xbb, 0x90, 0xde, 0x9c, 0xcb, 0x6d, 0xdb, 0x51, 0x41, 0x8d, 0x1d, 0x54, 0xce, 0x62, 0xb2, 0x73, 0xf1, 0x83, 0xf6, 0x96, 0x84, 0x9f, 0xc3, 0x94, 0x36, 0x4f, 0x9a, 0x7f, 0xcc, 0x51, 0x75, 0x70, 0x75, 0x96, 0xad, 0x5c, 0x86, 0x98, 0xe6, 0x53, 0xe4, 0x4e, 0x9c, 0x6e, 0x09, 0x74, 0xb4, 0x69, 0x6b, 0x78, 0x8f, 0x99, 0x59, 0x75, 0x18, 0x52, 0x24, 0x76, 0x41, 0x6d, 0xf3, 0x67, 0x6d, 0x51, 0x99, 0x9f, 0x4b, 0x80, 0x99, 0x54, 0x3c, 0x7b, 0xbf, 0x7a, 0x86, 0x96, 0x84, 0x57, 0xe2, 0x62, 0x47, 0x96, 0x7c, 0x69, 0x04, 0x5a, 0x02, 0x64, 0xd3, 0x7b, 0x0f, 0x6f, 0x4b, 0x96, 0xa6, 0x82, 0x62, 0x53, 0x85, 0x98, 0x90, 0x5e, 0x89, 0x70, 0xb3, 0x63, 0x64, 0x53, 0x4f, 0x86, 0x81, 0x9c, 0x93, 0x9e, 0x8c, 0x78, 0x32, 0x97, 0xef, 0x8d, 0x42, 0x8d, 0x7f, 0x9e, 0x5e, 0x6f, 0x84, 0x79, 0x55, 0x5f, 0x46, 0x96, 0x2e, 0x62, 0x74, 0x9a, 0x15, 0x54, 0xdd, 0x94, 0xa3, 0x4f, 0xc5, 0x65, 0x65, 0x5c, 0x61, 0x5c, 0x15, 0x7f, 0x51, 0x86, 0x2f, 0x6c, 0x8b, 0x5f, 0x87, 0x73, 0xe4, 0x6e, 0xff, 0x7e, 0xe6, 0x5c, 0x1b, 0x63, 0x6a, 0x5b, 0xe6, 0x6e, 0x75, 0x53, 0x71, 0x4e, 0xa0, 0x63, 0x65, 0x75, 0xa1, 0x62, 0x6e, 0x8f, 0x26, 0x4f, 0xd1, 0x4e, 0xa6, 0x6c, 0xb6, 0x7e, 0xba, 0x8b, 0x1d, 0x84, 0xba, 0x87, 0x57, 0x7f, 0x3b, 0x90, 0x23, 0x95, 0xa9, 0x7b, 0xa1, 0x9a, 0xf8, 0x88, 0x3d, 0x84, 0x1b, 0x6d, 0x86, 0x9a, 0xdc, 0x7e, 0x88, 0x59, 0xbb, 0x9e, 0x9b, 0x73, 0x01, 0x78, 0x82, 0x86, 0x6c, 0x9a, 0x82, 0x9a, 0x1b, 0x56, 0x17, 0x54, 0xcb, 0x57, 0x70, 0x4e, 0xa6, 0x9e, 0x56, 0x53, 0xc8, 0x8f, 0x09, 0x81, 0x92, 0x77, 0x92, 0x99, 0xee, 0x86, 0xe1, 0x6e, 0x13, 0x85, 0xfc, 0x66, 0x62, 0x61, 0x2b, 0x6f, 0x29, 0x8c, 0x92, 0x82, 0x2b, 0x83, 0xf2, 0x76, 0x13, 0x6c, 0xd9, 0x5f, 0xbd, 0x83, 0x2b, 0x73, 0x05, 0x83, 0x1a, 0x95, 0xdb, 0x6b, 0xdb, 0x77, 0xc6, 0x94, 0x6f, 0x53, 0x02, 0x83, 0x92, 0x51, 0x3d, 0x5e, 0x8c, 0x8c, 0x38, 0x8d, 0x48, 0x4e, 0xab, 0x73, 0x9a, 0x67, 0x85, 0x68, 0x76, 0x91, 0x09, 0x97, 0x64, 0x71, 0xa1, 0x6c, 0x09, 0x77, 0x92, 0x5a, 0x41, 0x95, 0xcf, 0x6b, 0x8e, 0x7f, 0x27, 0x66, 0xd0, 0x5b, 0xb9, 0x59, 0x9a, 0x5a, 0xe8, 0x95, 0xf7, 0x95, 0xec, 0x4e, 0x0c, 0x84, 0x99, 0x84, 0xac, 0x6a, 0xdf, 0x76, 0x30, 0x95, 0x1b, 0x73, 0xa6, 0x68, 0x5f, 0x5b, 0x2f, 0x77, 0x9a, 0x91, 0x61, 0x97, 0xdc, 0x7c, 0xf7, 0x8f, 0x1c, 0x8c, 0x25, 0x5f, 0x73, 0x7c, 0xd8, 0x79, 0xc5, 0x89, 0xcc, 0x6c, 0x1c, 0x87, 0xc6, 0x5b, 0x42, 0x5e, 0xc9, 0x68, 0x20, 0x77, 0xf5, 0x7e, 0x95, 0x51, 0x4d, 0x51, 0xc9, 0x52, 0x29, 0x5a, 0x05, 0x7f, 0x62, 0x97, 0xd7, 0x82, 0xcf, 0x63, 0x84, 0x77, 0xd0, 0x85, 0xd2, 0x79, 0x3a, 0x6e, 0x99, 0x5e, 0x99, 0x59, 0x11, 0x85, 0x6d, 0x70, 0x11, 0x6c, 0xbf, 0x62, 0xbf, 0x76, 0x4f, 0x65, 0xaf, 0x60, 0xfd, 0x95, 0x0e, 0x66, 0x9f, 0x87, 0x23, 0x9e, 0xed, 0x94, 0x0d, 0x54, 0x7d, 0x54, 0x2c, 0x8c, 0x78, 0x64, 0x79, 0x64, 0x11, 0x86, 0x21, 0x6a, 0x9c, 0x81, 0xe8, 0x78, 0x69, 0x64, 0x54, 0x9b, 0xb9, 0x62, 0x2b, 0x67, 0xab, 0x83, 0xa8, 0x58, 0xd8, 0x9e, 0xab, 0x6c, 0x20, 0x6f, 0xde, 0x5b, 0x4c, 0x96, 0x0b, 0x8c, 0x5f, 0x72, 0xd0, 0x67, 0xc7, 0x62, 0x61, 0x72, 0xa9, 0x4e, 0xc6, 0x59, 0xcd, 0x6b, 0x93, 0x58, 0xae, 0x66, 0x55, 0x5e, 0xdf, 0x52, 0x55, 0x61, 0x28, 0x67, 0xee, 0x76, 0x66, 0x77, 0x67, 0x72, 0x46, 0x7a, 0xff, 0x62, 0xea, 0x54, 0x50, 0x54, 0xa0, 0x94, 0xa3, 0x90, 0x1c, 0x5a, 0xb3, 0x7e, 0x16, 0x6c, 0x43, 0x4e, 0x76, 0x59, 0x10, 0x80, 0x48, 0x59, 0x57, 0x53, 0x37, 0x75, 0xbe, 0x96, 0xca, 0x56, 0x20, 0x63, 0x11, 0x81, 0x7c, 0x60, 0xf9, 0x95, 0xd6, 0x6d, 0x62, 0x54, 0x81, 0x99, 0x85, 0x51, 0xe9, 0x5a, 0xfd, 0x80, 0xae, 0x59, 0x13, 0x97, 0x2a, 0x50, 0xe5, 0x6c, 0x3c, 0x5c, 0xdf, 0x62, 0x60, 0x4f, 0x3f, 0x53, 0x7b, 0x81, 0x06, 0x90, 0xba, 0x6e, 0x2b, 0x85, 0xc8, 0x62, 0x74, 0x5e, 0xbe, 0x78, 0xb5, 0x64, 0x7b, 0x63, 0xf5, 0x5f, 0x18, 0x5a, 0x7f, 0x91, 0x1f, 0x9e, 0x3f, 0x5c, 0x4f, 0x63, 0x42, 0x80, 0x7d, 0x5b, 0x6e, 0x55, 0x4a, 0x95, 0x4d, 0x95, 0x85, 0x6d, 0xa8, 0x60, 0xe0, 0x67, 0xde, 0x72, 0xdd, 0x51, 0x81, 0x5b, 0xe7, 0x62, 0xde, 0x6c, 0x5b, 0x72, 0x6d, 0x62, 0xae, 0x94, 0xbd, 0x7e, 0x13, 0x81, 0x53, 0x6d, 0x9c, 0x51, 0x04, 0x5f, 0x74, 0x59, 0xaa, 0x52, 0x12, 0x60, 0x73, 0x59, 0x96, 0x66, 0x50, 0x86, 0x9f, 0x75, 0x2a, 0x63, 0xe6, 0x61, 0xef, 0x7c, 0xfa, 0x8b, 0xe6, 0x54, 0x27, 0x6b, 0x25, 0x9e, 0xb4, 0x6b, 0xd5, 0x85, 0x55, 0x54, 0x76, 0x50, 0xa4, 0x6c, 0x6a, 0x55, 0xb4, 0x8d, 0x2c, 0x72, 0x15, 0x5e, 0x15, 0x60, 0x36, 0x74, 0xcd, 0x62, 0x92, 0x63, 0x4c, 0x72, 0x98, 0x5f, 0x43, 0x6e, 0x3e, 0x6d, 0x00, 0x65, 0x58, 0x6f, 0xd8, 0x76, 0xd0, 0x78, 0xfc, 0x76, 0x54, 0x75, 0x24, 0x52, 0xdb, 0x53, 0x53, 0x4e, 0x9e, 0x5e, 0xc1, 0x65, 0x2a, 0x80, 0xd6, 0x80, 0x9b, 0x62, 0x86, 0x54, 0x28, 0x52, 0xae, 0x70, 0x8d, 0x88, 0xd1, 0x8d, 0xe1, 0x6c, 0x78, 0x54, 0xda, 0x80, 0xf9, 0x57, 0xf4, 0x88, 0x54, 0x8d, 0x6a, 0x96, 0x4d, 0x91, 0x69, 0x4f, 0x9b, 0x6c, 0xb7, 0x55, 0xc6, 0x76, 0x30, 0x78, 0xa8, 0x62, 0xf9, 0x70, 0x8e, 0x6f, 0x6d, 0x5f, 0xec, 0x84, 0xda, 0x68, 0x7c, 0x78, 0xf7, 0x7b, 0xa8, 0x81, 0x0b, 0x67, 0x4f, 0x9e, 0x67, 0x63, 0xb0, 0x78, 0x6f, 0x57, 0x12, 0x78, 0x39, 0x97, 0x79, 0x62, 0xab, 0x62, 0x88, 0x52, 0x35, 0x74, 0xd7, 0x6b, 0x64, 0x55, 0x3e, 0x81, 0xb2, 0x75, 0xae, 0x76, 0x39, 0x53, 0xde, 0x75, 0xfb, 0x50, 0x41, 0x5c, 0x6c, 0x8b, 0xc7, 0x7b, 0x4f, 0x50, 0x47, 0x72, 0x97, 0x9a, 0xd8, 0x98, 0x02, 0x6f, 0xe2, 0x74, 0x68, 0x79, 0x87, 0x64, 0xa5, 0x77, 0xfc, 0x62, 0x91, 0x98, 0x2b, 0x8d, 0xc1, 0x54, 0x58, 0x80, 0x52, 0x4e, 0x6a, 0x57, 0xf9, 0x82, 0x0d, 0x84, 0x73, 0x5e, 0xed, 0x51, 0xf6, 0x74, 0xc4, 0x8b, 0x4f, 0x5c, 0x61, 0x57, 0xfc, 0x6c, 0x87, 0x98, 0x46, 0x5a, 0x34, 0x78, 0x44, 0x9b, 0xeb, 0x8f, 0x95, 0x7c, 0x56, 0x52, 0x51, 0x62, 0xfa, 0x94, 0xc6, 0x4e, 0x86, 0x83, 0x61, 0x84, 0xe9, 0x83, 0xb2, 0x84, 0xd4, 0x57, 0x34, 0x67, 0x03, 0x57, 0x6e, 0x66, 0x66, 0x6d, 0x31, 0x8c, 0xdd, 0x66, 0x11, 0x70, 0x1f, 0x67, 0x3a, 0x6b, 0x16, 0x68, 0x1a, 0x62, 0xbb, 0x59, 0x03, 0x4e, 0xc4, 0x51, 0x06, 0x6f, 0xd2, 0x67, 0x8f, 0x6c, 0x76, 0x51, 0xcb, 0x68, 0x47, 0x59, 0x67, 0x6b, 0x66, 0x75, 0x0e, 0x5d, 0x10, 0x81, 0x50, 0x9f, 0xd7, 0x65, 0x48, 0x79, 0x41, 0x79, 0x91, 0x9a, 0x77, 0x8d, 0x82, 0x5c, 0x5e, 0x4e, 0x01, 0x4f, 0x2f, 0x54, 0x51, 0x59, 0x0c, 0x78, 0x68, 0x56, 0x14, 0x6c, 0xc4, 0x8f, 0x03, 0x5f, 0x7d, 0x6c, 0xe3, 0x6c, 0xab, 0x8b, 0x90, 0x63, 0x70, 0x60, 0x3d, 0x6d, 0x75, 0x72, 0x66, 0x62, 0x8e, 0x94, 0xc5, 0x94, 0x43, 0x53, 0xc1, 0x8f, 0x7e, 0x7b, 0xdf, 0x4e, 0x26, 0x8c, 0x7e, 0x4e, 0xd4, 0x9e, 0xb1, 0x94, 0xb3, 0x94, 0x4d, 0x52, 0x5c, 0x6f, 0x63, 0x90, 0x45, 0x6d, 0x34, 0x8c, 0x11, 0x58, 0x4c, 0x5d, 0x20, 0x6b, 0x49, 0x6b, 0xaa, 0x67, 0x5b, 0x54, 0x54, 0x81, 0x8c, 0x7f, 0x99, 0x58, 0x37, 0x85, 0x3a, 0x5f, 0xa2, 0x62, 0x47, 0x6a, 0x39, 0x95, 0x72, 0x65, 0x84, 0x60, 0x65, 0x68, 0xa7, 0x77, 0x54, 0x4e, 0xa8, 0x4f, 0xe7, 0x5d, 0x98, 0x97, 0xac, 0x64, 0xd8, 0x7f, 0xed, 0x5c, 0xcf, 0x4f, 0x8d, 0x7a, 0x07, 0x52, 0x04, 0x83, 0x14, 0x4e, 0x2f, 0x60, 0x83, 0x7a, 0xa6, 0x94, 0xb5, 0x4f, 0xb2, 0x4e, 0xe6, 0x79, 0x34, 0x74, 0xe4, 0x52, 0xb9, 0x82, 0xd2, 0x64, 0xbd, 0x79, 0xdd, 0x5b, 0x81, 0x6c, 0x52, 0x97, 0x7b, 0x8f, 0x22, 0x6c, 0x3e, 0x50, 0x7f, 0x53, 0x05, 0x6e, 0xce, 0x64, 0x74, 0x66, 0x30, 0x6c, 0xc5, 0x60, 0x77, 0x98, 0xf7, 0x8b, 0x86, 0x5e, 0x3c, 0x74, 0x77, 0x7a, 0xcb, 0x79, 0x18, 0x4e, 0xb1, 0x90, 0x03, 0x74, 0x42, 0x6c, 0xda, 0x56, 0x4b, 0x91, 0xc5, 0x6c, 0x8b, 0x8d, 0x3a, 0x53, 0xc6, 0x86, 0xf2, 0x66, 0xaf, 0x8e, 0x48, 0x5c, 0x71, 0x9a, 0x20, 0x6e, 0xd6, 0x53, 0x36, 0x5a, 0x8b, 0x9f, 0xa3, 0x8d, 0xbb, 0x53, 0x08, 0x57, 0xa7, 0x98, 0x43, 0x67, 0x9b, 0x91, 0xc9, 0x6c, 0x68, 0x51, 0xca, 0x75, 0xf3, 0x62, 0xac, 0x72, 0x38, 0x52, 0x9d, 0x52, 0x3a, 0x7f, 0x94, 0x70, 0x38, 0x76, 0x74, 0x53, 0x4a, 0x9e, 0xb7, 0x69, 0x6e, 0x78, 0xc0, 0x96, 0xd9, 0x88, 0xa4, 0x7f, 0x36, 0x71, 0xc3, 0x71, 0x89, 0x51, 0xd3, 0x67, 0xe4, 0x74, 0xe4, 0x58, 0x18, 0x65, 0xb7, 0x56, 0xa9, 0x8b, 0x76, 0x99, 0x70, 0x62, 0xd5, 0x7e, 0xf9, 0x60, 0xed, 0x70, 0xec, 0x58, 0xc1, 0x4e, 0xba, 0x4e, 0xcd, 0x5f, 0xe7, 0x97, 0xfb, 0x4e, 0xa4, 0x8b, 0x03, 0x52, 0x8a, 0x59, 0xab, 0x7e, 0x54, 0x62, 0xcd, 0x4e, 0xe5, 0x65, 0x0e, 0x62, 0x38, 0x83, 0xc9, 0x84, 0x63, 0x83, 0x8d, 0x87, 0x94, 0x71, 0xb6, 0x6e, 0xb9, 0x5b, 0xd2, 0x7e, 0x97, 0x51, 0xc9, 0x63, 0xd4, 0x67, 0x89, 0x80, 0x39, 0x83, 0x15, 0x88, 0x12, 0x51, 0x7a, 0x5b, 0x82, 0x59, 0xb1, 0x8f, 0x73, 0x4e, 0x5d, 0x6c, 0x65, 0x51, 0x25, 0x89, 0x6f, 0x8f, 0x2e, 0x96, 0x4a, 0x85, 0x5e, 0x74, 0x10, 0x95, 0xf0, 0x95, 0xa6, 0x6d, 0xe5, 0x82, 0x31, 0x5f, 0x92, 0x64, 0x12, 0x6d, 0x28, 0x84, 0x6e, 0x81, 0xc3, 0x9c, 0x5e, 0x58, 0x5b, 0x8d, 0x09, 0x4e, 0xc1, 0x53, 0x1e, 0x4f, 0x63, 0x65, 0x51, 0x68, 0xd3, 0x55, 0x27, 0x4e, 0x14, 0x64, 0x9a, 0x9a, 0x6b, 0x62, 0xc2, 0x5a, 0x5f, 0x74, 0x72, 0x82, 0xa9, 0x6d, 0xee, 0x68, 0xe7, 0x50, 0x8e, 0x83, 0x02, 0x78, 0x40, 0x67, 0x39, 0x52, 0x99, 0x6c, 0xb1, 0x7e, 0xbb, 0x50, 0x65, 0x55, 0x5e, 0x71, 0x5b, 0x7b, 0x52, 0x66, 0xca, 0x73, 0xeb, 0x82, 0x49, 0x67, 0x71, 0x5c, 0x20, 0x52, 0x7d, 0x71, 0x6b, 0x88, 0xea, 0x95, 0x55, 0x96, 0xc5, 0x64, 0x61, 0x8d, 0xb3, 0x81, 0x84, 0x55, 0x55, 0x6c, 0x47, 0x62, 0x2e, 0x7f, 0x92, 0x58, 0x24, 0x4f, 0x46, 0x55, 0x4f, 0x8d, 0x4c, 0x66, 0x0a, 0x4e, 0x1a, 0x5c, 0xf3, 0x88, 0xa2, 0x68, 0x4e, 0x63, 0x0d, 0x7a, 0xe7, 0x70, 0x8d, 0x82, 0xfa, 0x52, 0xf6, 0x97, 0x11, 0x5c, 0xe8, 0x54, 0xb5, 0x90, 0xcd, 0x7e, 0x62, 0x59, 0x4a, 0x8d, 0xc7, 0x86, 0x0c, 0x82, 0x0d, 0x82, 0x66, 0x8d, 0x44, 0x64, 0x04, 0x5c, 0x51, 0x61, 0x89, 0x6d, 0x3e, 0x79, 0xbe, 0x8b, 0x37, 0x78, 0x33, 0x75, 0x7b, 0x54, 0x38, 0x4f, 0xab, 0x8e, 0xf1, 0x6d, 0x20, 0x5a, 0xc5, 0x7e, 0x5e, 0x79, 0x88, 0x6c, 0xa1, 0x5b, 0x76, 0x5a, 0x1a, 0x75, 0xbe, 0x80, 0x4e, 0x61, 0x17, 0x6e, 0xf0, 0x58, 0x1f, 0x75, 0x25, 0x75, 0x72, 0x72, 0x47, 0x53, 0xf3, 0x7e, 0x01, 0x77, 0xdb, 0x76, 0x69, 0x52, 0xdc, 0x80, 0x23, 0x57, 0x08, 0x5e, 0x31, 0x59, 0xee, 0x72, 0xbd, 0x65, 0x7f, 0x6e, 0xd7, 0x8b, 0x38, 0x5c, 0x71, 0x86, 0x41, 0x53, 0xf3, 0x77, 0xfe, 0x62, 0xf6, 0x65, 0xc0, 0x4e, 0xdf, 0x98, 0x80, 0x86, 0x9e, 0x5b, 0xc6, 0x8b, 0xf2, 0x53, 0xe2, 0x77, 0x7f, 0x4f, 0x4e, 0x5c, 0x76, 0x9a, 0xcb, 0x59, 0x0f, 0x5f, 0x3a, 0x79, 0xeb, 0x58, 0x16, 0x4e, 0xff, 0x67, 0x8b, 0x4e, 0xed, 0x62, 0x93, 0x8a, 0x1d, 0x90, 0xbf, 0x52, 0x2f, 0x66, 0xdc, 0x55, 0x6c, 0x56, 0x02, 0x90, 0xd5, 0x4e, 0x8d, 0x4f, 0xca, 0x91, 0x70, 0x99, 0x0f, 0x6c, 0x02, 0x5e, 0x43, 0x60, 0xa4, 0x5b, 0xc6, 0x89, 0xd5, 0x8b, 0x36, 0x65, 0x4b, 0x62, 0x96, 0x99, 0x88, 0x5b, 0xff, 0x5b, 0x88, 0x63, 0x2e, 0x55, 0xd7, 0x53, 0x26, 0x76, 0x7d, 0x51, 0x2c, 0x85, 0xa2, 0x67, 0xb3, 0x68, 0x8a, 0x6b, 0x92, 0x62, 0x93, 0x8f, 0xd4, 0x53, 0x12, 0x82, 0xd1, 0x6d, 0x8f, 0x75, 0x66, 0x4e, 0x4e, 0x8d, 0x70, 0x5b, 0x9f, 0x71, 0xaf, 0x85, 0x91, 0x66, 0xd9, 0x66, 0x72, 0x7f, 0x00, 0x87, 0xcd, 0x9e, 0x20, 0x9f, 0x5e, 0x5c, 0x2f, 0x67, 0xf0, 0x8f, 0x11, 0x68, 0x5f, 0x67, 0x0d, 0x62, 0xd6, 0x7a, 0x85, 0x58, 0xb6, 0x5e, 0x70, 0x65, 0x31, 0x6f, 0x55, 0x60, 0x37, 0x52, 0x0d, 0x80, 0x54, 0x64, 0x70, 0x88, 0x29, 0x75, 0x05, 0x5e, 0x13, 0x68, 0xf4, 0x62, 0x1c, 0x97, 0xcc, 0x53, 0x3d, 0x72, 0x01, 0x8c, 0x34, 0x6c, 0x61, 0x77, 0x0e, 0x7a, 0x2e, 0x54, 0xac, 0x77, 0x7a, 0x98, 0x1c, 0x82, 0xf4, 0x8b, 0x55, 0x78, 0x14, 0x67, 0xc1, 0x70, 0xaf, 0x65, 0x95, 0x64, 0x36, 0x56, 0x1d, 0x60, 0xc1, 0x79, 0xf8, 0x53, 0x1d, 0x4e, 0x7b, 0x6b, 0x86, 0x80, 0xfa, 0x5b, 0xe3, 0x55, 0xdb, 0x56, 0x3a, 0x4f, 0x3c, 0x4f, 0x72, 0x99, 0xf3, 0x5d, 0x7e, 0x67, 0x38, 0x80, 0x02, 0x60, 0x82, 0x98, 0x01, 0x90, 0x8b, 0x5b, 0xbc, 0x8b, 0xf5, 0x8b, 0x1c, 0x64, 0x58, 0x82, 0xde, 0x64, 0xfd, 0x55, 0xcf, 0x82, 0x65, 0x91, 0xd7, 0x4f, 0x20, 0x7d, 0x1f, 0x90, 0x9f, 0x7c, 0xf3, 0x50, 0x51, 0x58, 0xaf, 0x6e, 0xbf, 0x5b, 0xc9, 0x8b, 0x83, 0x80, 0x78, 0x91, 0x9c, 0x84, 0x97, 0x7b, 0x7d, 0x86, 0x8b, 0x96, 0x8f, 0x96, 0xe5, 0x7e, 0xd3, 0x9a, 0x8e, 0x78, 0x81, 0x5c, 0x57, 0x7a, 0x42, 0x90, 0xa7, 0x96, 0x5f, 0x79, 0x59, 0x5b, 0x5f, 0x63, 0x0b, 0x7b, 0xd1, 0x84, 0xad, 0x68, 0x06, 0x55, 0x29, 0x7f, 0x10, 0x74, 0x22, 0x7d, 0x01, 0x95, 0x40, 0x62, 0x4c, 0x58, 0xd6, 0x4e, 0x83, 0x5b, 0x79, 0x59, 0x54, 0x58, 0x6d, 0x73, 0x1e, 0x63, 0x4b, 0x8e, 0x0f, 0x8e, 0xce, 0x80, 0xd4, 0x82, 0xac, 0x62, 0xf0, 0x53, 0xf0, 0x6c, 0x5e, 0x91, 0x2a, 0x59, 0x01, 0x60, 0x70, 0x6c, 0x4d, 0x57, 0x4a, 0x64, 0x2a, 0x8d, 0x2b, 0x76, 0xe9, 0x6e, 0x5b, 0x57, 0x80, 0x6a, 0xf0, 0x75, 0x6d, 0x6f, 0x2d, 0x8c, 0x08, 0x8c, 0x66, 0x57, 0xef, 0x6b, 0x92, 0x88, 0xb3, 0x78, 0xa2, 0x63, 0xf9, 0x53, 0xad, 0x70, 0x64, 0x6c, 0x58, 0x58, 0x2a, 0x64, 0x02, 0x58, 0xe0, 0x68, 0x9b, 0x81, 0x10, 0x55, 0xd6, 0x7c, 0x18, 0x50, 0xba, 0x8e, 0xcc, 0x6d, 0x9f, 0x8d, 0xeb, 0x70, 0x8f, 0x63, 0x9b, 0x6d, 0xd4, 0x6e, 0xe6, 0x7e, 0x04, 0x84, 0x43, 0x68, 0x03, 0x90, 0xd8, 0x6d, 0x76, 0x96, 0xa8, 0x8b, 0x57, 0x59, 0x79, 0x72, 0xe4, 0x85, 0x7e, 0x81, 0xbc, 0x75, 0x8a, 0x8a, 0xaf, 0x68, 0x54, 0x52, 0x22, 0x8e, 0x11, 0x95, 0xd0, 0x63, 0x98, 0x98, 0x44, 0x8e, 0x7c, 0x55, 0x53, 0x4f, 0xff, 0x66, 0x8f, 0x56, 0xd5, 0x60, 0x95, 0x6d, 0x43, 0x52, 0x49, 0x5c, 0x29, 0x59, 0xfb, 0x6d, 0x6b, 0x58, 0x30, 0x75, 0x1c, 0x75, 0x6c, 0x60, 0x14, 0x82, 0x46, 0x81, 0x11, 0x63, 0x61, 0x67, 0xe2, 0x8f, 0x3a, 0x77, 0xf3, 0x8d, 0x34, 0x8d, 0xc1, 0x94, 0x16, 0x5e, 0x85, 0x53, 0x2c, 0x54, 0xc3, 0x70, 0x40, 0x6c, 0xf7, 0x5e, 0x5c, 0x50, 0xad, 0x4e, 0xad, 0x5e, 0x3a, 0x63, 0x47, 0x82, 0x1a, 0x90, 0x50, 0x68, 0x6e, 0x91, 0xb3, 0x77, 0x0c, 0x54, 0xdc, 0x94, 0x64, 0x5f, 0xe5, 0x7a, 0x76, 0x68, 0x45, 0x63, 0x52, 0x7b, 0xdf, 0x7e, 0xdb, 0x75, 0x77, 0x50, 0x95, 0x62, 0x34, 0x59, 0x0f, 0x90, 0xf8, 0x51, 0xc3, 0x79, 0x81, 0x7a, 0xfe, 0x56, 0x92, 0x5f, 0x14, 0x90, 0x82, 0x6d, 0x60, 0x5c, 0x1f, 0x57, 0x10, 0x54, 0x54, 0x51, 0x4d, 0x6e, 0xe2, 0x56, 0xa8, 0x63, 0x93, 0x98, 0x7f, 0x81, 0x15, 0x87, 0x2a, 0x89, 0x00, 0x90, 0x1e, 0x54, 0x6f, 0x5c, 0xc0, 0x81, 0xd6, 0x62, 0x58, 0x62, 0x31, 0x81, 0x35, 0x9e, 0x40, 0x96, 0x6e, 0x9a, 0x7c, 0x9a, 0x2d, 0x69, 0xa5, 0x59, 0xd3, 0x62, 0x3e, 0x55, 0x16, 0x63, 0xc7, 0x54, 0xd9, 0x86, 0x3c, 0x6d, 0x03, 0x5a, 0xe6, 0x74, 0x9c, 0x88, 0x6a, 0x6b, 0x16, 0x59, 0x4c, 0x8c, 0x2f, 0x5f, 0x7e, 0x6e, 0xa9, 0x73, 0x7d, 0x98, 0x38, 0x4e, 0xf7, 0x70, 0x8c, 0x5b, 0x97, 0x78, 0x3d, 0x63, 0x5a, 0x66, 0x96, 0x76, 0xcb, 0x60, 0x9b, 0x5b, 0x49, 0x5a, 0x07, 0x4e, 0x55, 0x81, 0x6a, 0x6c, 0x8b, 0x73, 0xa1, 0x4e, 0x89, 0x67, 0x51, 0x7f, 0x80, 0x5f, 0xfa, 0x65, 0x1b, 0x67, 0xd8, 0x5f, 0x84, 0x59, 0x01, 0x5a, 0xcd, 0x5d, 0xae, 0x5f, 0x71, 0x53, 0xe6, 0x97, 0xdd, 0x8f, 0x45, 0x68, 0xf4, 0x56, 0x2f, 0x55, 0xdf, 0x60, 0x3a, 0x4e, 0x4d, 0x6f, 0xf4, 0x7e, 0xc7, 0x82, 0x0e, 0x84, 0xd4, 0x59, 0x1f, 0x4f, 0x2a, 0x4f, 0x3e, 0x5c, 0xac, 0x7e, 0x2a, 0x67, 0x1a, 0x85, 0x73, 0x54, 0x4f, 0x75, 0xc3, 0x80, 0x82, 0x55, 0x4f, 0x9b, 0x4d, 0x4f, 0x2d, 0x6e, 0x13, 0x8c, 0x09, 0x5c, 0x70, 0x61, 0x6b, 0x53, 0x1f, 0x76, 0x29, 0x6e, 0x8a, 0x86, 0x87, 0x65, 0xfb, 0x95, 0xb9, 0x7e, 0x3b, 0x54, 0x33, 0x7a, 0x0a, 0x7d, 0xee, 0x95, 0xe1, 0x55, 0xc1, 0x7f, 0xee, 0x74, 0x1d, 0x63, 0x17, 0x87, 0xa1, 0x6d, 0x9d, 0x7a, 0x11, 0x62, 0xa1, 0x65, 0x67, 0x53, 0xe1, 0x63, 0x83, 0x6c, 0xeb, 0x5d, 0x5c, 0x54, 0xa8, 0x94, 0x4c, 0x4e, 0x61, 0x6c, 0xec, 0x8b, 0x4b, 0x5c, 0xe0, 0x65, 0x9c, 0x82, 0xa7, 0x68, 0x3e, 0x54, 0x34, 0x54, 0xcb, 0x6b, 0x66, 0x6b, 0x94, 0x4e, 0x42, 0x63, 0x48, 0x53, 0x1e, 0x82, 0x0d, 0x4f, 0xae, 0x4f, 0x5e, 0x57, 0x0a, 0x62, 0xfe, 0x96, 0x64, 0x66, 0x69, 0x72, 0xff, 0x52, 0xa1, 0x52, 0x9f, 0x60, 0xef, 0x8b, 0x14, 0x66, 0x99, 0x71, 0x90, 0x67, 0x7f, 0x89, 0x52, 0x78, 0xfd, 0x77, 0x70, 0x66, 0x3b, 0x56, 0x38, 0x54, 0x21, 0x95, 0x7a, 0x72, 0x00, 0x7a, 0x6f, 0x60, 0x0c, 0x5e, 0x89, 0x60, 0x9d, 0x81, 0x15, 0x59, 0xdc, 0x60, 0x84, 0x71, 0xef, 0x70, 0xaa, 0x6e, 0x50, 0x6c, 0x80, 0x72, 0x84, 0x6a, 0xad, 0x88, 0x2d, 0x5e, 0x60, 0x4e, 0xb3, 0x5a, 0x9c, 0x55, 0xe3, 0x94, 0x17, 0x6d, 0xfb, 0x7c, 0x99, 0x96, 0x0f, 0x62, 0xc6, 0x7e, 0x8e, 0x77, 0x7e, 0x86, 0x23, 0x53, 0x1e, 0x97, 0x96, 0x8f, 0x87, 0x66, 0xe1, 0x5c, 0xa0, 0x4f, 0xed, 0x72, 0x0b, 0x4e, 0xa6, 0x53, 0x0f, 0x59, 0x13, 0x54, 0x80, 0x63, 0x28, 0x95, 0x48, 0x51, 0xd9, 0x4e, 0x9c, 0x9c, 0xa4, 0x7e, 0xb8, 0x54, 0x24, 0x8d, 0x54, 0x88, 0x37, 0x82, 0xf2, 0x95, 0x8e, 0x6d, 0x26, 0x5f, 0xcc, 0x5a, 0x3e, 0x66, 0x69, 0x96, 0xb0, 0x73, 0x2e, 0x73, 0xbf, 0x53, 0x7a, 0x81, 0x85, 0x99, 0xa1, 0x7f, 0xaa, 0x5b, 0x77, 0x96, 0x50, 0x96, 0xbf, 0x7e, 0xf8, 0x76, 0xa2, 0x53, 0x76, 0x95, 0x99, 0x99, 0xb1, 0x7b, 0x44, 0x89, 0x58, 0x6e, 0x61, 0x4e, 0xd4, 0x7f, 0x65, 0x79, 0xe6, 0x8b, 0xf3, 0x60, 0xcd, 0x54, 0xab, 0x4e, 0x79, 0x98, 0xf7, 0x5d, 0x61, 0x6a, 0xcf, 0x50, 0x11, 0x54, 0x61, 0x8c, 0x27, 0x84, 0x5d, 0x78, 0x04, 0x97, 0x4a, 0x52, 0xee, 0x54, 0xa3, 0x56, 0x00, 0x95, 0x88, 0x6d, 0xb5, 0x5b, 0xc6, 0x6d, 0x53, 0x66, 0x0f, 0x5c, 0x5d, 0x5b, 0x21, 0x68, 0x96, 0x80, 0x78, 0x55, 0x11, 0x7b, 0x48, 0x65, 0x54, 0x69, 0x9b, 0x4e, 0x47, 0x6b, 0x4e, 0x87, 0x8b, 0x97, 0x4f, 0x53, 0x1f, 0x63, 0x3a, 0x64, 0xaa, 0x90, 0x9c, 0x65, 0xc1, 0x80, 0x10, 0x8c, 0x99, 0x51, 0xb0, 0x68, 0x78, 0x53, 0xf9, 0x87, 0xc8, 0x61, 0xc4, 0x6c, 0xfb, 0x6c, 0x22, 0x8c, 0x51, 0x5c, 0xaa, 0x85, 0xaf, 0x82, 0x0c, 0x95, 0x23, 0x6b, 0x9b, 0x8f, 0xb0, 0x65, 0xfb, 0x5f, 0xc3, 0x5f, 0xe1, 0x4f, 0x45, 0x88, 0x1f, 0x66, 0x65, 0x81, 0x29, 0x73, 0xfa, 0x60, 0x74, 0x51, 0x11, 0x52, 0x8b, 0x57, 0x62, 0x5f, 0xa2, 0x90, 0x4c, 0x88, 0x92, 0x91, 0x78, 0x5e, 0x4f, 0x67, 0x27, 0x60, 0xd3, 0x59, 0x44, 0x51, 0xf6, 0x51, 0xf8, 0x80, 0x08, 0x53, 0x79, 0x6c, 0xc4, 0x96, 0x8a, 0x71, 0x11, 0x4f, 0xee, 0x4f, 0x9e, 0x7f, 0x3d, 0x67, 0xc5, 0x55, 0x08, 0x95, 0xc0, 0x79, 0x96, 0x88, 0xe3, 0x7e, 0x9f, 0x58, 0x0c, 0x62, 0x00, 0x97, 0x5a, 0x86, 0x18, 0x56, 0x7b, 0x98, 0x90, 0x5f, 0xb8, 0x8b, 0xc4, 0x84, 0x57, 0x91, 0xd9, 0x53, 0xed, 0x65, 0x8f, 0x5e, 0x5c, 0x75, 0x64, 0x60, 0x6e, 0x7d, 0x7f, 0x5a, 0xea, 0x7e, 0xed, 0x7e, 0x69, 0x8f, 0xa7, 0x55, 0xa3, 0x5b, 0xac, 0x60, 0xcb, 0x65, 0x84, 0x73, 0x09, 0x90, 0x63, 0x76, 0x29, 0x77, 0xda, 0x7e, 0x74, 0x97, 0x9b, 0x85, 0x66, 0x5b, 0x74, 0x7a, 0xea, 0x96, 0x40, 0x88, 0xcb, 0x52, 0x8f, 0x71, 0xaa, 0x5f, 0xec, 0x65, 0xe2, 0x8b, 0xfb, 0x5b, 0x6f, 0x9a, 0xe1, 0x5d, 0x89, 0x6b, 0x5b, 0x6c, 0xad, 0x8b, 0xaf, 0x8b, 0x0a, 0x90, 0xc5, 0x8f, 0x8b, 0x53, 0xbc, 0x62, 0x26, 0x9e, 0x2d, 0x9e, 0x40, 0x54, 0x2b, 0x4e, 0xbd, 0x82, 0x59, 0x72, 0x9c, 0x86, 0x16, 0x5d, 0x59, 0x88, 0xaf, 0x6d, 0xc5, 0x96, 0xd1, 0x54, 0x9a, 0x4e, 0xb6, 0x8b, 0x09, 0x71, 0xbd, 0x54, 0x09, 0x96, 0xdf, 0x70, 0xf9, 0x6d, 0xd0, 0x76, 0x25, 0x4e, 0x14, 0x78, 0x12, 0x87, 0xa9, 0x5c, 0xf6, 0x5e, 0x00, 0x8a, 0x9c, 0x98, 0x0e, 0x96, 0x8e, 0x70, 0xbf, 0x6c, 0x44, 0x59, 0xa9, 0x63, 0x3c, 0x77, 0x4d, 0x88, 0x14, 0x6f, 0x73, 0x82, 0x30, 0x58, 0xd5, 0x71, 0x8c, 0x53, 0x1a, 0x78, 0xc1, 0x96, 0x01, 0x55, 0x66, 0x5f, 0x30, 0x71, 0xb4, 0x5b, 0x1a, 0x8c, 0x8c, 0x9a, 0x83, 0x6b, 0x2e, 0x59, 0x2f, 0x9e, 0xe7, 0x79, 0x68, 0x67, 0x6c, 0x62, 0x6f, 0x4f, 0xa1, 0x75, 0x8a, 0x7f, 0x0b, 0x6d, 0x33, 0x96, 0x27, 0x6c, 0xf0, 0x4e, 0xd2, 0x75, 0x7b, 0x51, 0x37, 0x68, 0x3e, 0x6f, 0x80, 0x90, 0x70, 0x81, 0x96, 0x59, 0x76, 0x74, 0x47, 0x64, 0x27, 0x5c, 0x65, 0x90, 0x91, 0x7a, 0x23, 0x8c, 0xda, 0x59, 0xac, 0x54, 0x00, 0x82, 0x6f, 0x83, 0x81, 0x89, 0x00, 0x80, 0x30, 0x69, 0x4e, 0x56, 0x36, 0x80, 0x37, 0x72, 0xce, 0x91, 0xb6, 0x51, 0x5f, 0x4e, 0x75, 0x98, 0x96, 0x63, 0x1a, 0x4e, 0xf6, 0x53, 0xf3, 0x66, 0x4b, 0x81, 0x1c, 0x59, 0xb2, 0x6d, 0x00, 0x4e, 0xf9, 0x58, 0x3b, 0x53, 0xd6, 0x63, 0xf1, 0x94, 0x9d, 0x4f, 0x0a, 0x4f, 0x63, 0x88, 0x90, 0x98, 0x37, 0x59, 0x57, 0x90, 0xfb, 0x79, 0xea, 0x4e, 0xf0, 0x80, 0x91, 0x75, 0x82, 0x6c, 0x9c, 0x5b, 0xe8, 0x59, 0x5d, 0x5f, 0x05, 0x69, 0x81, 0x86, 0x1a, 0x50, 0xf2, 0x5d, 0x59, 0x4e, 0xe3, 0x77, 0xe5, 0x4e, 0x7a, 0x82, 0x91, 0x62, 0x13, 0x66, 0x91, 0x90, 0x79, 0x5c, 0xbf, 0x4e, 0x79, 0x5f, 0xc6, 0x81, 0x38, 0x90, 0x84, 0x80, 0xab, 0x75, 0xa6, 0x4e, 0xd4, 0x88, 0x0f, 0x61, 0xc5, 0x6b, 0xc6, 0x5f, 0x49, 0x4e, 0xca, 0x76, 0xa2, 0x6e, 0xe3, 0x8b, 0xae, 0x8b, 0x0a, 0x8c, 0xd1, 0x8b, 0x02, 0x5f, 0xfc, 0x7f, 0xcc, 0x7f, 0xce, 0x7e, 0x35, 0x83, 0x6b, 0x83, 0xe0, 0x56, 0xb7, 0x6b, 0xf3, 0x97, 0x34, 0x96, 0xfb, 0x59, 0x1f, 0x54, 0xf6, 0x94, 0xeb, 0x6d, 0xc5, 0x5b, 0x6e, 0x99, 0x39, 0x5c, 0x15, 0x5f, 0x90, 0x96, 0x70, 0x53, 0xf1, 0x82, 0x31, 0x6a, 0x74, 0x5a, 0x70, 0x9e, 0x94, 0x5e, 0x28, 0x7f, 0xb9, 0x83, 0x24, 0x84, 0x25, 0x84, 0x67, 0x83, 0x47, 0x87, 0xce, 0x8f, 0x62, 0x8d, 0xc8, 0x76, 0x71, 0x5f, 0x96, 0x98, 0x6c, 0x78, 0x20, 0x66, 0xdf, 0x54, 0xe5, 0x62, 0x63, 0x4f, 0xc3, 0x81, 0xc8, 0x75, 0xb8, 0x5e, 0xcd, 0x96, 0x0a, 0x8e, 0xf9, 0x86, 0x8f, 0x54, 0xf3, 0x6c, 0x8c, 0x6d, 0x38, 0x6c, 0x7f, 0x60, 0xc7, 0x52, 0x28, 0x75, 0x7d, 0x5e, 0x18, 0x4f, 0xa0, 0x60, 0xe7, 0x5f, 0x24, 0x5c, 0x31, 0x75, 0xae, 0x90, 0xc0, 0x94, 0xb9, 0x72, 0xb9, 0x6c, 0x38, 0x6e, 0x49, 0x91, 0x09, 0x67, 0xcb, 0x53, 0xf3, 0x53, 0x51, 0x4f, 0xc9, 0x91, 0xf1, 0x8b, 0xc8, 0x53, 0x7c, 0x5e, 0xc2, 0x8f, 0xe4, 0x6d, 0x8e, 0x4e, 0xc2, 0x76, 0x86, 0x69, 0x5e, 0x86, 0x1a, 0x61, 0x06, 0x82, 0x59, 0x4f, 0xde, 0x4f, 0x3e, 0x90, 0x7c, 0x9c, 0x09, 0x61, 0x1d, 0x6e, 0x14, 0x6e, 0x85, 0x96, 0x88, 0x4e, 0x31, 0x5a, 0xe8, 0x96, 0x0e, 0x4e, 0x7f, 0x5c, 0xb9, 0x79, 0x87, 0x5b, 0xed, 0x8b, 0xbd, 0x7f, 0x89, 0x73, 0xdf, 0x57, 0x8b, 0x82, 0xc1, 0x90, 0x01, 0x54, 0x47, 0x90, 0xbb, 0x55, 0xea, 0x5c, 0xa1, 0x5f, 0x08, 0x61, 0x32, 0x6b, 0xf1, 0x72, 0xb2, 0x80, 0x89, 0x8a, 0x74, 0x6d, 0xd3, 0x5b, 0xd5, 0x88, 0x84, 0x98, 0x6b, 0x8c, 0x6d, 0x9a, 0x33, 0x9e, 0x0a, 0x6e, 0xa4, 0x51, 0x43, 0x51, 0xa3, 0x57, 0x81, 0x88, 0x9f, 0x53, 0xf4, 0x63, 0x95, 0x8f, 0xed, 0x56, 0x58, 0x54, 0x06, 0x57, 0x3f, 0x73, 0x90, 0x6e, 0x18, 0x7f, 0xdc, 0x8f, 0xd1, 0x82, 0x3f, 0x61, 0x28, 0x60, 0x62, 0x96, 0xf0, 0x66, 0xa6, 0x7e, 0x8a, 0x8d, 0xc3, 0x8d, 0xa5, 0x94, 0xb3, 0x5c, 0xa4, 0x7c, 0x08, 0x67, 0xa6, 0x60, 0x05, 0x96, 0x18, 0x80, 0x91, 0x4e, 0xe7, 0x90, 0x00, 0x53, 0x68, 0x96, 0x41, 0x51, 0xd0, 0x8f, 0x74, 0x85, 0x5d, 0x91, 0x55, 0x66, 0xf5, 0x97, 0x55, 0x5b, 0x1d, 0x53, 0x38, 0x78, 0x42, 0x67, 0x3d, 0x68, 0xc9, 0x54, 0x7e, 0x70, 0xb0, 0x5b, 0x7d, 0x8f, 0x8d, 0x51, 0x28, 0x57, 0xb1, 0x54, 0x12, 0x65, 0x82, 0x66, 0x5e, 0x8d, 0x43, 0x8d, 0x0f, 0x81, 0x6c, 0x84, 0x6d, 0x90, 0xdf, 0x7c, 0xff, 0x51, 0xfb, 0x85, 0xa3, 0x67, 0xe9, 0x65, 0xa1, 0x6f, 0xa4, 0x86, 0x81, 0x8e, 0x6a, 0x56, 0x20, 0x90, 0x82, 0x76, 0x76, 0x70, 0xe5, 0x71, 0x23, 0x8d, 0xe9, 0x62, 0x19, 0x52, 0xfd, 0x6c, 0x3c, 0x8d, 0x0e, 0x60, 0x9e, 0x58, 0x8e, 0x61, 0xfe, 0x66, 0x60, 0x8d, 0x4e, 0x62, 0xb3, 0x55, 0x23, 0x6e, 0x2d, 0x67, 0x67, 0x8f, 0xe1, 0x94, 0xf8, 0x95, 0x28, 0x77, 0x05, 0x68, 0xa8, 0x69, 0x8b, 0x54, 0x4d, 0x4e, 0xb8, 0x70, 0xc8, 0x8b, 0x58, 0x64, 0x8b, 0x65, 0x85, 0x5b, 0x84, 0x7a, 0x3a, 0x50, 0xe8, 0x5b, 0xbb, 0x77, 0xe1, 0x6b, 0x79, 0x8a, 0x98, 0x7c, 0xbe, 0x6c, 0xcf, 0x76, 0xa9, 0x65, 0x97, 0x8f, 0x2d, 0x5d, 0x55, 0x5c, 0x38, 0x86, 0x08, 0x68, 0x60, 0x53, 0x18, 0x62, 0xd9, 0x7a, 0x5b, 0x6e, 0xfd, 0x7e, 0x1f, 0x6a, 0xe0, 0x7a, 0x70, 0x5f, 0x33, 0x6f, 0x20, 0x5f, 0x8c, 0x63, 0xa8, 0x6d, 0x56, 0x67, 0x08, 0x4e, 0x10, 0x5e, 0x26, 0x8d, 0xd7, 0x4e, 0xc0, 0x80, 0x34, 0x76, 0x9c, 0x96, 0xdb, 0x62, 0x2d, 0x66, 0x7e, 0x62, 0xbc, 0x6c, 0x75, 0x8d, 0x67, 0x71, 0x69, 0x7f, 0x46, 0x51, 0x87, 0x80, 0xec, 0x53, 0x6e, 0x90, 0x98, 0x62, 0xf2, 0x54, 0xf0, 0x86, 0x99, 0x8f, 0x05, 0x80, 0x17, 0x95, 0x17, 0x85, 0xd9, 0x8f, 0x59, 0x6d, 0xcd, 0x73, 0x9f, 0x65, 0x1f, 0x77, 0x04, 0x75, 0x27, 0x78, 0xfb, 0x81, 0x1e, 0x8d, 0x88, 0x94, 0xa6, 0x4f, 0x95, 0x67, 0xb9, 0x75, 0xca, 0x8b, 0x07, 0x97, 0x2f, 0x63, 0x47, 0x95, 0x35, 0x96, 0xb8, 0x84, 0x23, 0x63, 0x41, 0x77, 0x81, 0x5f, 0xf0, 0x72, 0x89, 0x4e, 0x14, 0x60, 0x74, 0x65, 0xef, 0x62, 0x63, 0x6b, 0x3f, 0x65, 0x27, 0x5e, 0xc7, 0x75, 0xd1, 0x90, 0xc1, 0x8b, 0x9d, 0x82, 0x9d, 0x67, 0x2f, 0x65, 0x31, 0x54, 0x18, 0x87, 0xe5, 0x77, 0xa2, 0x80, 0x02, 0x81, 0x41, 0x6c, 0x4b, 0x4e, 0xc7, 0x7e, 0x4c, 0x80, 0xf4, 0x76, 0x0d, 0x69, 0x96, 0x6b, 0x67, 0x62, 0x3c, 0x50, 0x84, 0x4f, 0x40, 0x57, 0x07, 0x63, 0x62, 0x6b, 0xbe, 0x8d, 0xea, 0x53, 0xe8, 0x65, 0xb8, 0x7e, 0xd7, 0x5f, 0x1a, 0x63, 0xb7, 0x63, 0xf3, 0x81, 0xf4, 0x81, 0x6e, 0x7f, 0x1c, 0x5e, 0xd9, 0x5c, 0x36, 0x52, 0x7a, 0x66, 0xe9, 0x79, 0x1a, 0x7a, 0x28, 0x8d, 0x99, 0x70, 0xd4, 0x75, 0xde, 0x6e, 0xbb, 0x6c, 0x92, 0x7a, 0x2d, 0x4e, 0xc5, 0x76, 0xe0, 0x5f, 0x9f, 0x94, 0x77, 0x88, 0xc8, 0x7e, 0xcd, 0x79, 0xbf, 0x80, 0xcd, 0x91, 0xf2, 0x4e, 0x17, 0x4f, 0x1f, 0x82, 0x68, 0x54, 0xde, 0x5d, 0x32, 0x6d, 0xcc, 0x8b, 0xa5, 0x7c, 0x74, 0x8f, 0x98, 0x80, 0x1a, 0x5e, 0x92, 0x54, 0xb1, 0x76, 0x99, 0x5b, 0x3c, 0x66, 0xa4, 0x9a, 0xe0, 0x73, 0x2a, 0x68, 0xdb, 0x86, 0x31, 0x67, 0x2a, 0x73, 0xf8, 0x8b, 0xdb, 0x8b, 0x10, 0x90, 0xf9, 0x7a, 0xdb, 0x70, 0x6e, 0x71, 0xc4, 0x62, 0xa9, 0x77, 0x31, 0x56, 0x3b, 0x4e, 0x57, 0x84, 0xf1, 0x67, 0xa9, 0x52, 0xc0, 0x86, 0x2e, 0x8d, 0xf8, 0x94, 0x51, 0x7b, 0x4f, 0x4f, 0xe8, 0x6c, 0x5d, 0x79, 0x7b, 0x9a, 0x93, 0x62, 0x2a, 0x72, 0xfd, 0x62, 0x13, 0x4e, 0x16, 0x78, 0x6c, 0x8f, 0xb0, 0x64, 0x5a, 0x8d, 0xc6, 0x7b, 0x69, 0x68, 0x84, 0x5e, 0xc5, 0x88, 0x86, 0x59, 0x9e, 0x64, 0xee, 0x58, 0xb6, 0x72, 0x0e, 0x69, 0x25, 0x95, 0xfd, 0x8f, 0x58, 0x8d, 0x60, 0x57, 0x00, 0x7f, 0x06, 0x8c, 0xc6, 0x51, 0x49, 0x63, 0xd9, 0x62, 0x53, 0x53, 0x4c, 0x68, 0x22, 0x74, 0x01, 0x83, 0x4c, 0x91, 0x44, 0x55, 0x40, 0x77, 0x7c, 0x70, 0x4a, 0x6d, 0x79, 0x51, 0xa8, 0x54, 0x44, 0x8d, 0xff, 0x59, 0xcb, 0x6e, 0xc4, 0x6d, 0x5c, 0x5b, 0x2b, 0x7d, 0xd4, 0x4e, 0x7d, 0x7c, 0xd3, 0x6e, 0x50, 0x5b, 0xea, 0x81, 0x0d, 0x6e, 0x57, 0x5b, 0x03, 0x9b, 0xd5, 0x68, 0x2a, 0x8e, 0x97, 0x5b, 0xfc, 0x7e, 0x3b, 0x60, 0xb5, 0x7e, 0xb9, 0x90, 0x70, 0x8d, 0x4f, 0x59, 0xcd, 0x63, 0xdf, 0x79, 0xb3, 0x8d, 0x52, 0x53, 0xcf, 0x65, 0x56, 0x79, 0xc5, 0x8b, 0x3b, 0x96, 0xc4, 0x7e, 0xbb, 0x94, 0x82, 0x7e, 0x34, 0x56, 0x89, 0x91, 0x00, 0x67, 0x6a, 0x7f, 0x0a, 0x5c, 0x75, 0x90, 0x28, 0x66, 0xe6, 0x5d, 0x50, 0x4f, 0xde, 0x67, 0x5a, 0x50, 0x5c, 0x4f, 0x50, 0x57, 0xa7, 0x5e, 0x10, 0xe8, 0x11, 0xe8, 0x12, 0xe8, 0x13, 0xe8, 0x14, 0xe8, 0x8d, 0x4e, 0x0c, 0x4e, 0x40, 0x51, 0x10, 0x4e, 0xff, 0x5e, 0x45, 0x53, 0x15, 0x4e, 0x98, 0x4e, 0x1e, 0x4e, 0x32, 0x9b, 0x6c, 0x5b, 0x69, 0x56, 0x28, 0x4e, 0xba, 0x79, 0x3f, 0x4e, 0x15, 0x53, 0x47, 0x4e, 0x2d, 0x59, 0x3b, 0x72, 0x6e, 0x53, 0x10, 0x6c, 0xdf, 0x56, 0xe4, 0x80, 0x97, 0x99, 0xd3, 0x6b, 0x7e, 0x77, 0x17, 0x9f, 0x36, 0x4e, 0x9f, 0x4e, 0x10, 0x9f, 0x5c, 0x4e, 0x69, 0x4e, 0x93, 0x4e, 0x88, 0x82, 0x5b, 0x5b, 0x6c, 0x55, 0x0f, 0x56, 0xc4, 0x4e, 0x8d, 0x53, 0x9d, 0x53, 0xa3, 0x53, 0xa5, 0x53, 0xae, 0x53, 0x65, 0x97, 0x5d, 0x8d, 0x1a, 0x53, 0xf5, 0x53, 0x26, 0x53, 0x2e, 0x53, 0x3e, 0x53, 0x5c, 0x8d, 0x66, 0x53, 0x63, 0x53, 0x02, 0x52, 0x08, 0x52, 0x0e, 0x52, 0x2d, 0x52, 0x33, 0x52, 0x3f, 0x52, 0x40, 0x52, 0x4c, 0x52, 0x5e, 0x52, 0x61, 0x52, 0x5c, 0x52, 0xaf, 0x84, 0x7d, 0x52, 0x82, 0x52, 0x81, 0x52, 0x90, 0x52, 0x93, 0x52, 0x82, 0x51, 0x54, 0x7f, 0xbb, 0x4e, 0xc3, 0x4e, 0xc9, 0x4e, 0xc2, 0x4e, 0xe8, 0x4e, 0xe1, 0x4e, 0xeb, 0x4e, 0xde, 0x4e, 0x1b, 0x4f, 0xf3, 0x4e, 0x22, 0x4f, 0x64, 0x4f, 0xf5, 0x4e, 0x25, 0x4f, 0x27, 0x4f, 0x09, 0x4f, 0x2b, 0x4f, 0x5e, 0x4f, 0x67, 0x4f, 0x38, 0x65, 0x5a, 0x4f, 0x5d, 0x4f, 0x5f, 0x4f, 0x57, 0x4f, 0x32, 0x4f, 0x3d, 0x4f, 0x76, 0x4f, 0x74, 0x4f, 0x91, 0x4f, 0x89, 0x4f, 0x83, 0x4f, 0x8f, 0x4f, 0x7e, 0x4f, 0x7b, 0x4f, 0xaa, 0x4f, 0x7c, 0x4f, 0xac, 0x4f, 0x94, 0x4f, 0xe6, 0x4f, 0xe8, 0x4f, 0xea, 0x4f, 0xc5, 0x4f, 0xda, 0x4f, 0xe3, 0x4f, 0xdc, 0x4f, 0xd1, 0x4f, 0xdf, 0x4f, 0xf8, 0x4f, 0x29, 0x50, 0x4c, 0x50, 0xf3, 0x4f, 0x2c, 0x50, 0x0f, 0x50, 0x2e, 0x50, 0x2d, 0x50, 0xfe, 0x4f, 0x1c, 0x50, 0x0c, 0x50, 0x25, 0x50, 0x28, 0x50, 0x7e, 0x50, 0x43, 0x50, 0x55, 0x50, 0x48, 0x50, 0x4e, 0x50, 0x6c, 0x50, 0x7b, 0x50, 0xa5, 0x50, 0xa7, 0x50, 0xa9, 0x50, 0xba, 0x50, 0xd6, 0x50, 0x06, 0x51, 0xed, 0x50, 0xec, 0x50, 0xe6, 0x50, 0xee, 0x50, 0x07, 0x51, 0x0b, 0x51, 0xdd, 0x4e, 0x3d, 0x6c, 0x58, 0x4f, 0x65, 0x4f, 0xce, 0x4f, 0xa0, 0x9f, 0x46, 0x6c, 0x74, 0x7c, 0x6e, 0x51, 0xfd, 0x5d, 0xc9, 0x9e, 0x98, 0x99, 0x81, 0x51, 0x14, 0x59, 0xf9, 0x52, 0x0d, 0x53, 0x07, 0x8a, 0x10, 0x53, 0xeb, 0x51, 0x19, 0x59, 0x55, 0x51, 0xa0, 0x4e, 0x56, 0x51, 0xb3, 0x4e, 0x6e, 0x88, 0xa4, 0x88, 0xb5, 0x4e, 0x14, 0x81, 0xd2, 0x88, 0x80, 0x79, 0x34, 0x5b, 0x03, 0x88, 0xb8, 0x7f, 0xab, 0x51, 0xb1, 0x51, 0xbd, 0x51, 0xbc, 0x51, 0xc7, 0x51, 0x96, 0x51, 0xa2, 0x51, 0xa5, 0x51, 0xa0, 0x8b, 0xa6, 0x8b, 0xa7, 0x8b, 0xaa, 0x8b, 0xb4, 0x8b, 0xb5, 0x8b, 0xb7, 0x8b, 0xc2, 0x8b, 0xc3, 0x8b, 0xcb, 0x8b, 0xcf, 0x8b, 0xce, 0x8b, 0xd2, 0x8b, 0xd3, 0x8b, 0xd4, 0x8b, 0xd6, 0x8b, 0xd8, 0x8b, 0xd9, 0x8b, 0xdc, 0x8b, 0xdf, 0x8b, 0xe0, 0x8b, 0xe4, 0x8b, 0xe8, 0x8b, 0xe9, 0x8b, 0xee, 0x8b, 0xf0, 0x8b, 0xf3, 0x8b, 0xf6, 0x8b, 0xf9, 0x8b, 0xfc, 0x8b, 0xff, 0x8b, 0x00, 0x8c, 0x02, 0x8c, 0x04, 0x8c, 0x07, 0x8c, 0x0c, 0x8c, 0x0f, 0x8c, 0x11, 0x8c, 0x12, 0x8c, 0x14, 0x8c, 0x15, 0x8c, 0x16, 0x8c, 0x19, 0x8c, 0x1b, 0x8c, 0x18, 0x8c, 0x1d, 0x8c, 0x1f, 0x8c, 0x20, 0x8c, 0x21, 0x8c, 0x25, 0x8c, 0x27, 0x8c, 0x2a, 0x8c, 0x2b, 0x8c, 0x2e, 0x8c, 0x2f, 0x8c, 0x32, 0x8c, 0x33, 0x8c, 0x35, 0x8c, 0x36, 0x8c, 0x69, 0x53, 0x7a, 0x53, 0x1d, 0x96, 0x22, 0x96, 0x21, 0x96, 0x31, 0x96, 0x2a, 0x96, 0x3d, 0x96, 0x3c, 0x96, 0x42, 0x96, 0x49, 0x96, 0x54, 0x96, 0x5f, 0x96, 0x67, 0x96, 0x6c, 0x96, 0x72, 0x96, 0x74, 0x96, 0x88, 0x96, 0x8d, 0x96, 0x97, 0x96, 0xb0, 0x96, 0x97, 0x90, 0x9b, 0x90, 0x9d, 0x90, 0x99, 0x90, 0xac, 0x90, 0xa1, 0x90, 0xb4, 0x90, 0xb3, 0x90, 0xb6, 0x90, 0xba, 0x90, 0xb8, 0x90, 0xb0, 0x90, 0xcf, 0x90, 0xc5, 0x90, 0xbe, 0x90, 0xd0, 0x90, 0xc4, 0x90, 0xc7, 0x90, 0xd3, 0x90, 0xe6, 0x90, 0xe2, 0x90, 0xdc, 0x90, 0xd7, 0x90, 0xdb, 0x90, 0xeb, 0x90, 0xef, 0x90, 0xfe, 0x90, 0x04, 0x91, 0x22, 0x91, 0x1e, 0x91, 0x23, 0x91, 0x31, 0x91, 0x2f, 0x91, 0x39, 0x91, 0x43, 0x91, 0x46, 0x91, 0x0d, 0x52, 0x42, 0x59, 0xa2, 0x52, 0xac, 0x52, 0xad, 0x52, 0xbe, 0x52, 0xff, 0x54, 0xd0, 0x52, 0xd6, 0x52, 0xf0, 0x52, 0xdf, 0x53, 0xee, 0x71, 0xcd, 0x77, 0xf4, 0x5e, 0xf5, 0x51, 0xfc, 0x51, 0x2f, 0x9b, 0xb6, 0x53, 0x01, 0x5f, 0x5a, 0x75, 0xef, 0x5d, 0x4c, 0x57, 0xa9, 0x57, 0xa1, 0x57, 0x7e, 0x58, 0xbc, 0x58, 0xc5, 0x58, 0xd1, 0x58, 0x29, 0x57, 0x2c, 0x57, 0x2a, 0x57, 0x33, 0x57, 0x39, 0x57, 0x2e, 0x57, 0x2f, 0x57, 0x5c, 0x57, 0x3b, 0x57, 0x42, 0x57, 0x69, 0x57, 0x85, 0x57, 0x6b, 0x57, 0x86, 0x57, 0x7c, 0x57, 0x7b, 0x57, 0x68, 0x57, 0x6d, 0x57, 0x76, 0x57, 0x73, 0x57, 0xad, 0x57, 0xa4, 0x57, 0x8c, 0x57, 0xb2, 0x57, 0xcf, 0x57, 0xa7, 0x57, 0xb4, 0x57, 0x93, 0x57, 0xa0, 0x57, 0xd5, 0x57, 0xd8, 0x57, 0xda, 0x57, 0xd9, 0x57, 0xd2, 0x57, 0xb8, 0x57, 0xf4, 0x57, 0xef, 0x57, 0xf8, 0x57, 0xe4, 0x57, 0xdd, 0x57, 0x0b, 0x58, 0x0d, 0x58, 0xfd, 0x57, 0xed, 0x57, 0x00, 0x58, 0x1e, 0x58, 0x19, 0x58, 0x44, 0x58, 0x20, 0x58, 0x65, 0x58, 0x6c, 0x58, 0x81, 0x58, 0x89, 0x58, 0x9a, 0x58, 0x80, 0x58, 0xa8, 0x99, 0x19, 0x9f, 0xff, 0x61, 0x79, 0x82, 0x7d, 0x82, 0x7f, 0x82, 0x8f, 0x82, 0x8a, 0x82, 0xa8, 0x82, 0x84, 0x82, 0x8e, 0x82, 0x91, 0x82, 0x97, 0x82, 0x99, 0x82, 0xab, 0x82, 0xb8, 0x82, 0xbe, 0x82, 0xb0, 0x82, 0xc8, 0x82, 0xca, 0x82, 0xe3, 0x82, 0x98, 0x82, 0xb7, 0x82, 0xae, 0x82, 0xcb, 0x82, 0xcc, 0x82, 0xc1, 0x82, 0xa9, 0x82, 0xb4, 0x82, 0xa1, 0x82, 0xaa, 0x82, 0x9f, 0x82, 0xc4, 0x82, 0xce, 0x82, 0xa4, 0x82, 0xe1, 0x82, 0x09, 0x83, 0xf7, 0x82, 0xe4, 0x82, 0x0f, 0x83, 0x07, 0x83, 0xdc, 0x82, 0xf4, 0x82, 0xd2, 0x82, 0xd8, 0x82, 0x0c, 0x83, 0xfb, 0x82, 0xd3, 0x82, 0x11, 0x83, 0x1a, 0x83, 0x06, 0x83, 0x14, 0x83, 0x15, 0x83, 0xe0, 0x82, 0xd5, 0x82, 0x1c, 0x83, 0x51, 0x83, 0x5b, 0x83, 0x5c, 0x83, 0x08, 0x83, 0x92, 0x83, 0x3c, 0x83, 0x34, 0x83, 0x31, 0x83, 0x9b, 0x83, 0x5e, 0x83, 0x2f, 0x83, 0x4f, 0x83, 0x47, 0x83, 0x43, 0x83, 0x5f, 0x83, 0x40, 0x83, 0x17, 0x83, 0x60, 0x83, 0x2d, 0x83, 0x3a, 0x83, 0x33, 0x83, 0x66, 0x83, 0x65, 0x83, 0x68, 0x83, 0x1b, 0x83, 0x69, 0x83, 0x6c, 0x83, 0x6a, 0x83, 0x6d, 0x83, 0x6e, 0x83, 0xb0, 0x83, 0x78, 0x83, 0xb3, 0x83, 0xb4, 0x83, 0xa0, 0x83, 0xaa, 0x83, 0x93, 0x83, 0x9c, 0x83, 0x85, 0x83, 0x7c, 0x83, 0xb6, 0x83, 0xa9, 0x83, 0x7d, 0x83, 0xb8, 0x83, 0x7b, 0x83, 0x98, 0x83, 0x9e, 0x83, 0xa8, 0x83, 0xba, 0x83, 0xbc, 0x83, 0xc1, 0x83, 0x01, 0x84, 0xe5, 0x83, 0xd8, 0x83, 0x07, 0x58, 0x18, 0x84, 0x0b, 0x84, 0xdd, 0x83, 0xfd, 0x83, 0xd6, 0x83, 0x1c, 0x84, 0x38, 0x84, 0x11, 0x84, 0x06, 0x84, 0xd4, 0x83, 0xdf, 0x83, 0x0f, 0x84, 0x03, 0x84, 0xf8, 0x83, 0xf9, 0x83, 0xea, 0x83, 0xc5, 0x83, 0xc0, 0x83, 0x26, 0x84, 0xf0, 0x83, 0xe1, 0x83, 0x5c, 0x84, 0x51, 0x84, 0x5a, 0x84, 0x59, 0x84, 0x73, 0x84, 0x87, 0x84, 0x88, 0x84, 0x7a, 0x84, 0x89, 0x84, 0x78, 0x84, 0x3c, 0x84, 0x46, 0x84, 0x69, 0x84, 0x76, 0x84, 0x8c, 0x84, 0x8e, 0x84, 0x31, 0x84, 0x6d, 0x84, 0xc1, 0x84, 0xcd, 0x84, 0xd0, 0x84, 0xe6, 0x84, 0xbd, 0x84, 0xd3, 0x84, 0xca, 0x84, 0xbf, 0x84, 0xba, 0x84, 0xe0, 0x84, 0xa1, 0x84, 0xb9, 0x84, 0xb4, 0x84, 0x97, 0x84, 0xe5, 0x84, 0xe3, 0x84, 0x0c, 0x85, 0x0d, 0x75, 0x38, 0x85, 0xf0, 0x84, 0x39, 0x85, 0x1f, 0x85, 0x3a, 0x85, 0x56, 0x85, 0x3b, 0x85, 0xff, 0x84, 0xfc, 0x84, 0x59, 0x85, 0x48, 0x85, 0x68, 0x85, 0x64, 0x85, 0x5e, 0x85, 0x7a, 0x85, 0xa2, 0x77, 0x43, 0x85, 0x72, 0x85, 0x7b, 0x85, 0xa4, 0x85, 0xa8, 0x85, 0x87, 0x85, 0x8f, 0x85, 0x79, 0x85, 0xae, 0x85, 0x9c, 0x85, 0x85, 0x85, 0xb9, 0x85, 0xb7, 0x85, 0xb0, 0x85, 0xd3, 0x85, 0xc1, 0x85, 0xdc, 0x85, 0xff, 0x85, 0x27, 0x86, 0x05, 0x86, 0x29, 0x86, 0x16, 0x86, 0x3c, 0x86, 0xfe, 0x5e, 0x08, 0x5f, 0x3c, 0x59, 0x41, 0x59, 0x37, 0x80, 0x55, 0x59, 0x5a, 0x59, 0x58, 0x59, 0x0f, 0x53, 0x22, 0x5c, 0x25, 0x5c, 0x2c, 0x5c, 0x34, 0x5c, 0x4c, 0x62, 0x6a, 0x62, 0x9f, 0x62, 0xbb, 0x62, 0xca, 0x62, 0xda, 0x62, 0xd7, 0x62, 0xee, 0x62, 0x22, 0x63, 0xf6, 0x62, 0x39, 0x63, 0x4b, 0x63, 0x43, 0x63, 0xad, 0x63, 0xf6, 0x63, 0x71, 0x63, 0x7a, 0x63, 0x8e, 0x63, 0xb4, 0x63, 0x6d, 0x63, 0xac, 0x63, 0x8a, 0x63, 0x69, 0x63, 0xae, 0x63, 0xbc, 0x63, 0xf2, 0x63, 0xf8, 0x63, 0xe0, 0x63, 0xff, 0x63, 0xc4, 0x63, 0xde, 0x63, 0xce, 0x63, 0x52, 0x64, 0xc6, 0x63, 0xbe, 0x63, 0x45, 0x64, 0x41, 0x64, 0x0b, 0x64, 0x1b, 0x64, 0x20, 0x64, 0x0c, 0x64, 0x26, 0x64, 0x21, 0x64, 0x5e, 0x64, 0x84, 0x64, 0x6d, 0x64, 0x96, 0x64, 0x7a, 0x64, 0xb7, 0x64, 0xb8, 0x64, 0x99, 0x64, 0xba, 0x64, 0xc0, 0x64, 0xd0, 0x64, 0xd7, 0x64, 0xe4, 0x64, 0xe2, 0x64, 0x09, 0x65, 0x25, 0x65, 0x2e, 0x65, 0x0b, 0x5f, 0xd2, 0x5f, 0x19, 0x75, 0x11, 0x5f, 0x5f, 0x53, 0xf1, 0x53, 0xfd, 0x53, 0xe9, 0x53, 0xe8, 0x53, 0xfb, 0x53, 0x12, 0x54, 0x16, 0x54, 0x06, 0x54, 0x4b, 0x54, 0x52, 0x54, 0x53, 0x54, 0x54, 0x54, 0x56, 0x54, 0x43, 0x54, 0x21, 0x54, 0x57, 0x54, 0x59, 0x54, 0x23, 0x54, 0x32, 0x54, 0x82, 0x54, 0x94, 0x54, 0x77, 0x54, 0x71, 0x54, 0x64, 0x54, 0x9a, 0x54, 0x9b, 0x54, 0x84, 0x54, 0x76, 0x54, 0x66, 0x54, 0x9d, 0x54, 0xd0, 0x54, 0xad, 0x54, 0xc2, 0x54, 0xb4, 0x54, 0xd2, 0x54, 0xa7, 0x54, 0xa6, 0x54, 0xd3, 0x54, 0xd4, 0x54, 0x72, 0x54, 0xa3, 0x54, 0xd5, 0x54, 0xbb, 0x54, 0xbf, 0x54, 0xcc, 0x54, 0xd9, 0x54, 0xda, 0x54, 0xdc, 0x54, 0xa9, 0x54, 0xaa, 0x54, 0xa4, 0x54, 0xdd, 0x54, 0xcf, 0x54, 0xde, 0x54, 0x1b, 0x55, 0xe7, 0x54, 0x20, 0x55, 0xfd, 0x54, 0x14, 0x55, 0xf3, 0x54, 0x22, 0x55, 0x23, 0x55, 0x0f, 0x55, 0x11, 0x55, 0x27, 0x55, 0x2a, 0x55, 0x67, 0x55, 0x8f, 0x55, 0xb5, 0x55, 0x49, 0x55, 0x6d, 0x55, 0x41, 0x55, 0x55, 0x55, 0x3f, 0x55, 0x50, 0x55, 0x3c, 0x55, 0x37, 0x55, 0x56, 0x55, 0x75, 0x55, 0x76, 0x55, 0x77, 0x55, 0x33, 0x55, 0x30, 0x55, 0x5c, 0x55, 0x8b, 0x55, 0xd2, 0x55, 0x83, 0x55, 0xb1, 0x55, 0xb9, 0x55, 0x88, 0x55, 0x81, 0x55, 0x9f, 0x55, 0x7e, 0x55, 0xd6, 0x55, 0x91, 0x55, 0x7b, 0x55, 0xdf, 0x55, 0xbd, 0x55, 0xbe, 0x55, 0x94, 0x55, 0x99, 0x55, 0xea, 0x55, 0xf7, 0x55, 0xc9, 0x55, 0x1f, 0x56, 0xd1, 0x55, 0xeb, 0x55, 0xec, 0x55, 0xd4, 0x55, 0xe6, 0x55, 0xdd, 0x55, 0xc4, 0x55, 0xef, 0x55, 0xe5, 0x55, 0xf2, 0x55, 0xf3, 0x55, 0xcc, 0x55, 0xcd, 0x55, 0xe8, 0x55, 0xf5, 0x55, 0xe4, 0x55, 0x94, 0x8f, 0x1e, 0x56, 0x08, 0x56, 0x0c, 0x56, 0x01, 0x56, 0x24, 0x56, 0x23, 0x56, 0xfe, 0x55, 0x00, 0x56, 0x27, 0x56, 0x2d, 0x56, 0x58, 0x56, 0x39, 0x56, 0x57, 0x56, 0x2c, 0x56, 0x4d, 0x56, 0x62, 0x56, 0x59, 0x56, 0x5c, 0x56, 0x4c, 0x56, 0x54, 0x56, 0x86, 0x56, 0x64, 0x56, 0x71, 0x56, 0x6b, 0x56, 0x7b, 0x56, 0x7c, 0x56, 0x85, 0x56, 0x93, 0x56, 0xaf, 0x56, 0xd4, 0x56, 0xd7, 0x56, 0xdd, 0x56, 0xe1, 0x56, 0xf5, 0x56, 0xeb, 0x56, 0xf9, 0x56, 0xff, 0x56, 0x04, 0x57, 0x0a, 0x57, 0x09, 0x57, 0x1c, 0x57, 0x0f, 0x5e, 0x19, 0x5e, 0x14, 0x5e, 0x11, 0x5e, 0x31, 0x5e, 0x3b, 0x5e, 0x3c, 0x5e, 0x37, 0x5e, 0x44, 0x5e, 0x54, 0x5e, 0x5b, 0x5e, 0x5e, 0x5e, 0x61, 0x5e, 0x8c, 0x5c, 0x7a, 0x5c, 0x8d, 0x5c, 0x90, 0x5c, 0x96, 0x5c, 0x88, 0x5c, 0x98, 0x5c, 0x99, 0x5c, 0x91, 0x5c, 0x9a, 0x5c, 0x9c, 0x5c, 0xb5, 0x5c, 0xa2, 0x5c, 0xbd, 0x5c, 0xac, 0x5c, 0xab, 0x5c, 0xb1, 0x5c, 0xa3, 0x5c, 0xc1, 0x5c, 0xb7, 0x5c, 0xc4, 0x5c, 0xd2, 0x5c, 0xe4, 0x5c, 0xcb, 0x5c, 0xe5, 0x5c, 0x02, 0x5d, 0x03, 0x5d, 0x27, 0x5d, 0x26, 0x5d, 0x2e, 0x5d, 0x24, 0x5d, 0x1e, 0x5d, 0x06, 0x5d, 0x1b, 0x5d, 0x58, 0x5d, 0x3e, 0x5d, 0x34, 0x5d, 0x3d, 0x5d, 0x6c, 0x5d, 0x5b, 0x5d, 0x6f, 0x5d, 0x5d, 0x5d, 0x6b, 0x5d, 0x4b, 0x5d, 0x4a, 0x5d, 0x69, 0x5d, 0x74, 0x5d, 0x82, 0x5d, 0x99, 0x5d, 0x9d, 0x5d, 0x73, 0x8c, 0xb7, 0x5d, 0xc5, 0x5d, 0x73, 0x5f, 0x77, 0x5f, 0x82, 0x5f, 0x87, 0x5f, 0x89, 0x5f, 0x8c, 0x5f, 0x95, 0x5f, 0x99, 0x5f, 0x9c, 0x5f, 0xa8, 0x5f, 0xad, 0x5f, 0xb5, 0x5f, 0xbc, 0x5f, 0x62, 0x88, 0x61, 0x5f, 0xad, 0x72, 0xb0, 0x72, 0xb4, 0x72, 0xb7, 0x72, 0xb8, 0x72, 0xc3, 0x72, 0xc1, 0x72, 0xce, 0x72, 0xcd, 0x72, 0xd2, 0x72, 0xe8, 0x72, 0xef, 0x72, 0xe9, 0x72, 0xf2, 0x72, 0xf4, 0x72, 0xf7, 0x72, 0x01, 0x73, 0xf3, 0x72, 0x03, 0x73, 0xfa, 0x72, 0xfb, 0x72, 0x17, 0x73, 0x13, 0x73, 0x21, 0x73, 0x0a, 0x73, 0x1e, 0x73, 0x1d, 0x73, 0x15, 0x73, 0x22, 0x73, 0x39, 0x73, 0x25, 0x73, 0x2c, 0x73, 0x38, 0x73, 0x31, 0x73, 0x50, 0x73, 0x4d, 0x73, 0x57, 0x73, 0x60, 0x73, 0x6c, 0x73, 0x6f, 0x73, 0x7e, 0x73, 0x1b, 0x82, 0x25, 0x59, 0xe7, 0x98, 0x24, 0x59, 0x02, 0x59, 0x63, 0x99, 0x67, 0x99, 0x68, 0x99, 0x69, 0x99, 0x6a, 0x99, 0x6b, 0x99, 0x6c, 0x99, 0x74, 0x99, 0x77, 0x99, 0x7d, 0x99, 0x80, 0x99, 0x84, 0x99, 0x87, 0x99, 0x8a, 0x99, 0x8d, 0x99, 0x90, 0x99, 0x91, 0x99, 0x93, 0x99, 0x94, 0x99, 0x95, 0x99, 0x80, 0x5e, 0x91, 0x5e, 0x8b, 0x5e, 0x96, 0x5e, 0xa5, 0x5e, 0xa0, 0x5e, 0xb9, 0x5e, 0xb5, 0x5e, 0xbe, 0x5e, 0xb3, 0x5e, 0x53, 0x8d, 0xd2, 0x5e, 0xd1, 0x5e, 0xdb, 0x5e, 0xe8, 0x5e, 0xea, 0x5e, 0xba, 0x81, 0xc4, 0x5f, 0xc9, 0x5f, 0xd6, 0x5f, 0xcf, 0x5f, 0x03, 0x60, 0xee, 0x5f, 0x04, 0x60, 0xe1, 0x5f, 0xe4, 0x5f, 0xfe, 0x5f, 0x05, 0x60, 0x06, 0x60, 0xea, 0x5f, 0xed, 0x5f, 0xf8, 0x5f, 0x19, 0x60, 0x35, 0x60, 0x26, 0x60, 0x1b, 0x60, 0x0f, 0x60, 0x0d, 0x60, 0x29, 0x60, 0x2b, 0x60, 0x0a, 0x60, 0x3f, 0x60, 0x21, 0x60, 0x78, 0x60, 0x79, 0x60, 0x7b, 0x60, 0x7a, 0x60, 0x42, 0x60, 0x6a, 0x60, 0x7d, 0x60, 0x96, 0x60, 0x9a, 0x60, 0xad, 0x60, 0x9d, 0x60, 0x83, 0x60, 0x92, 0x60, 0x8c, 0x60, 0x9b, 0x60, 0xec, 0x60, 0xbb, 0x60, 0xb1, 0x60, 0xdd, 0x60, 0xd8, 0x60, 0xc6, 0x60, 0xda, 0x60, 0xb4, 0x60, 0x20, 0x61, 0x26, 0x61, 0x15, 0x61, 0x23, 0x61, 0xf4, 0x60, 0x00, 0x61, 0x0e, 0x61, 0x2b, 0x61, 0x4a, 0x61, 0x75, 0x61, 0xac, 0x61, 0x94, 0x61, 0xa7, 0x61, 0xb7, 0x61, 0xd4, 0x61, 0xf5, 0x61, 0xdd, 0x5f, 0xb3, 0x96, 0xe9, 0x95, 0xeb, 0x95, 0xf1, 0x95, 0xf3, 0x95, 0xf5, 0x95, 0xf6, 0x95, 0xfc, 0x95, 0xfe, 0x95, 0x03, 0x96, 0x04, 0x96, 0x06, 0x96, 0x08, 0x96, 0x0a, 0x96, 0x0b, 0x96, 0x0c, 0x96, 0x0d, 0x96, 0x0f, 0x96, 0x12, 0x96, 0x15, 0x96, 0x16, 0x96, 0x17, 0x96, 0x19, 0x96, 0x1a, 0x96, 0x2c, 0x4e, 0x3f, 0x72, 0x15, 0x62, 0x35, 0x6c, 0x54, 0x6c, 0x5c, 0x6c, 0x4a, 0x6c, 0xa3, 0x6c, 0x85, 0x6c, 0x90, 0x6c, 0x94, 0x6c, 0x8c, 0x6c, 0x68, 0x6c, 0x69, 0x6c, 0x74, 0x6c, 0x76, 0x6c, 0x86, 0x6c, 0xa9, 0x6c, 0xd0, 0x6c, 0xd4, 0x6c, 0xad, 0x6c, 0xf7, 0x6c, 0xf8, 0x6c, 0xf1, 0x6c, 0xd7, 0x6c, 0xb2, 0x6c, 0xe0, 0x6c, 0xd6, 0x6c, 0xfa, 0x6c, 0xeb, 0x6c, 0xee, 0x6c, 0xb1, 0x6c, 0xd3, 0x6c, 0xef, 0x6c, 0xfe, 0x6c, 0x39, 0x6d, 0x27, 0x6d, 0x0c, 0x6d, 0x43, 0x6d, 0x48, 0x6d, 0x07, 0x6d, 0x04, 0x6d, 0x19, 0x6d, 0x0e, 0x6d, 0x2b, 0x6d, 0x4d, 0x6d, 0x2e, 0x6d, 0x35, 0x6d, 0x1a, 0x6d, 0x4f, 0x6d, 0x52, 0x6d, 0x54, 0x6d, 0x33, 0x6d, 0x91, 0x6d, 0x6f, 0x6d, 0x9e, 0x6d, 0xa0, 0x6d, 0x5e, 0x6d, 0x93, 0x6d, 0x94, 0x6d, 0x5c, 0x6d, 0x60, 0x6d, 0x7c, 0x6d, 0x63, 0x6d, 0x1a, 0x6e, 0xc7, 0x6d, 0xc5, 0x6d, 0xde, 0x6d, 0x0e, 0x6e, 0xbf, 0x6d, 0xe0, 0x6d, 0x11, 0x6e, 0xe6, 0x6d, 0xdd, 0x6d, 0xd9, 0x6d, 0x16, 0x6e, 0xab, 0x6d, 0x0c, 0x6e, 0xae, 0x6d, 0x2b, 0x6e, 0x6e, 0x6e, 0x4e, 0x6e, 0x6b, 0x6e, 0xb2, 0x6e, 0x5f, 0x6e, 0x86, 0x6e, 0x53, 0x6e, 0x54, 0x6e, 0x32, 0x6e, 0x25, 0x6e, 0x44, 0x6e, 0xdf, 0x6e, 0xb1, 0x6e, 0x98, 0x6e, 0xe0, 0x6e, 0x2d, 0x6f, 0xe2, 0x6e, 0xa5, 0x6e, 0xa7, 0x6e, 0xbd, 0x6e, 0xbb, 0x6e, 0xb7, 0x6e, 0xd7, 0x6e, 0xb4, 0x6e, 0xcf, 0x6e, 0x8f, 0x6e, 0xc2, 0x6e, 0x9f, 0x6e, 0x62, 0x6f, 0x46, 0x6f, 0x47, 0x6f, 0x24, 0x6f, 0x15, 0x6f, 0xf9, 0x6e, 0x2f, 0x6f, 0x36, 0x6f, 0x4b, 0x6f, 0x74, 0x6f, 0x2a, 0x6f, 0x09, 0x6f, 0x29, 0x6f, 0x89, 0x6f, 0x8d, 0x6f, 0x8c, 0x6f, 0x78, 0x6f, 0x72, 0x6f, 0x7c, 0x6f, 0x7a, 0x6f, 0xd1, 0x6f, 0xc9, 0x6f, 0xa7, 0x6f, 0xb9, 0x6f, 0xb6, 0x6f, 0xc2, 0x6f, 0xe1, 0x6f, 0xee, 0x6f, 0xde, 0x6f, 0xe0, 0x6f, 0xef, 0x6f, 0x1a, 0x70, 0x23, 0x70, 0x1b, 0x70, 0x39, 0x70, 0x35, 0x70, 0x4f, 0x70, 0x5e, 0x70, 0x80, 0x5b, 0x84, 0x5b, 0x95, 0x5b, 0x93, 0x5b, 0xa5, 0x5b, 0xb8, 0x5b, 0x2f, 0x75, 0x9e, 0x9a, 0x34, 0x64, 0xe4, 0x5b, 0xee, 0x5b, 0x30, 0x89, 0xf0, 0x5b, 0x47, 0x8e, 0x07, 0x8b, 0xb6, 0x8f, 0xd3, 0x8f, 0xd5, 0x8f, 0xe5, 0x8f, 0xee, 0x8f, 0xe4, 0x8f, 0xe9, 0x8f, 0xe6, 0x8f, 0xf3, 0x8f, 0xe8, 0x8f, 0x05, 0x90, 0x04, 0x90, 0x0b, 0x90, 0x26, 0x90, 0x11, 0x90, 0x0d, 0x90, 0x16, 0x90, 0x21, 0x90, 0x35, 0x90, 0x36, 0x90, 0x2d, 0x90, 0x2f, 0x90, 0x44, 0x90, 0x51, 0x90, 0x52, 0x90, 0x50, 0x90, 0x68, 0x90, 0x58, 0x90, 0x62, 0x90, 0x5b, 0x90, 0xb9, 0x66, 0x74, 0x90, 0x7d, 0x90, 0x82, 0x90, 0x88, 0x90, 0x83, 0x90, 0x8b, 0x90, 0x50, 0x5f, 0x57, 0x5f, 0x56, 0x5f, 0x58, 0x5f, 0x3b, 0x5c, 0xab, 0x54, 0x50, 0x5c, 0x59, 0x5c, 0x71, 0x5b, 0x63, 0x5c, 0x66, 0x5c, 0xbc, 0x7f, 0x2a, 0x5f, 0x29, 0x5f, 0x2d, 0x5f, 0x74, 0x82, 0x3c, 0x5f, 0x3b, 0x9b, 0x6e, 0x5c, 0x81, 0x59, 0x83, 0x59, 0x8d, 0x59, 0xa9, 0x59, 0xaa, 0x59, 0xa3, 0x59, 0x97, 0x59, 0xca, 0x59, 0xab, 0x59, 0x9e, 0x59, 0xa4, 0x59, 0xd2, 0x59, 0xb2, 0x59, 0xaf, 0x59, 0xd7, 0x59, 0xbe, 0x59, 0x05, 0x5a, 0x06, 0x5a, 0xdd, 0x59, 0x08, 0x5a, 0xe3, 0x59, 0xd8, 0x59, 0xf9, 0x59, 0x0c, 0x5a, 0x09, 0x5a, 0x32, 0x5a, 0x34, 0x5a, 0x11, 0x5a, 0x23, 0x5a, 0x13, 0x5a, 0x40, 0x5a, 0x67, 0x5a, 0x4a, 0x5a, 0x55, 0x5a, 0x3c, 0x5a, 0x62, 0x5a, 0x75, 0x5a, 0xec, 0x80, 0xaa, 0x5a, 0x9b, 0x5a, 0x77, 0x5a, 0x7a, 0x5a, 0xbe, 0x5a, 0xeb, 0x5a, 0xb2, 0x5a, 0xd2, 0x5a, 0xd4, 0x5a, 0xb8, 0x5a, 0xe0, 0x5a, 0xe3, 0x5a, 0xf1, 0x5a, 0xd6, 0x5a, 0xe6, 0x5a, 0xd8, 0x5a, 0xdc, 0x5a, 0x09, 0x5b, 0x17, 0x5b, 0x16, 0x5b, 0x32, 0x5b, 0x37, 0x5b, 0x40, 0x5b, 0x15, 0x5c, 0x1c, 0x5c, 0x5a, 0x5b, 0x65, 0x5b, 0x73, 0x5b, 0x51, 0x5b, 0x53, 0x5b, 0x62, 0x5b, 0x75, 0x9a, 0x77, 0x9a, 0x78, 0x9a, 0x7a, 0x9a, 0x7f, 0x9a, 0x7d, 0x9a, 0x80, 0x9a, 0x81, 0x9a, 0x85, 0x9a, 0x88, 0x9a, 0x8a, 0x9a, 0x90, 0x9a, 0x92, 0x9a, 0x93, 0x9a, 0x96, 0x9a, 0x98, 0x9a, 0x9b, 0x9a, 0x9c, 0x9a, 0x9d, 0x9a, 0x9f, 0x9a, 0xa0, 0x9a, 0xa2, 0x9a, 0xa3, 0x9a, 0xa5, 0x9a, 0xa7, 0x9a, 0x9f, 0x7e, 0xa1, 0x7e, 0xa3, 0x7e, 0xa5, 0x7e, 0xa8, 0x7e, 0xa9, 0x7e, 0xad, 0x7e, 0xb0, 0x7e, 0xbe, 0x7e, 0xc0, 0x7e, 0xc1, 0x7e, 0xc2, 0x7e, 0xc9, 0x7e, 0xcb, 0x7e, 0xcc, 0x7e, 0xd0, 0x7e, 0xd4, 0x7e, 0xd7, 0x7e, 0xdb, 0x7e, 0xe0, 0x7e, 0xe1, 0x7e, 0xe8, 0x7e, 0xeb, 0x7e, 0xee, 0x7e, 0xef, 0x7e, 0xf1, 0x7e, 0xf2, 0x7e, 0x0d, 0x7f, 0xf6, 0x7e, 0xfa, 0x7e, 0xfb, 0x7e, 0xfe, 0x7e, 0x01, 0x7f, 0x02, 0x7f, 0x03, 0x7f, 0x07, 0x7f, 0x08, 0x7f, 0x0b, 0x7f, 0x0c, 0x7f, 0x0f, 0x7f, 0x11, 0x7f, 0x12, 0x7f, 0x17, 0x7f, 0x19, 0x7f, 0x1c, 0x7f, 0x1b, 0x7f, 0x1f, 0x7f, 0x21, 0x7f, 0x22, 0x7f, 0x23, 0x7f, 0x24, 0x7f, 0x25, 0x7f, 0x26, 0x7f, 0x27, 0x7f, 0x2a, 0x7f, 0x2b, 0x7f, 0x2c, 0x7f, 0x2d, 0x7f, 0x2f, 0x7f, 0x30, 0x7f, 0x31, 0x7f, 0x32, 0x7f, 0x33, 0x7f, 0x35, 0x7f, 0x7a, 0x5e, 0x7f, 0x75, 0xdb, 0x5d, 0x3e, 0x75, 0x95, 0x90, 0x8e, 0x73, 0x91, 0x73, 0xae, 0x73, 0xa2, 0x73, 0x9f, 0x73, 0xcf, 0x73, 0xc2, 0x73, 0xd1, 0x73, 0xb7, 0x73, 0xb3, 0x73, 0xc0, 0x73, 0xc9, 0x73, 0xc8, 0x73, 0xe5, 0x73, 0xd9, 0x73, 0x7c, 0x98, 0x0a, 0x74, 0xe9, 0x73, 0xe7, 0x73, 0xde, 0x73, 0xba, 0x73, 0xf2, 0x73, 0x0f, 0x74, 0x2a, 0x74, 0x5b, 0x74, 0x26, 0x74, 0x25, 0x74, 0x28, 0x74, 0x30, 0x74, 0x2e, 0x74, 0x2c, 0x74, 0x1b, 0x74, 0x1a, 0x74, 0x41, 0x74, 0x5c, 0x74, 0x57, 0x74, 0x55, 0x74, 0x59, 0x74, 0x77, 0x74, 0x6d, 0x74, 0x7e, 0x74, 0x9c, 0x74, 0x8e, 0x74, 0x80, 0x74, 0x81, 0x74, 0x87, 0x74, 0x8b, 0x74, 0x9e, 0x74, 0xa8, 0x74, 0xa9, 0x74, 0x90, 0x74, 0xa7, 0x74, 0xd2, 0x74, 0xba, 0x74, 0xea, 0x97, 0xeb, 0x97, 0xec, 0x97, 0x4c, 0x67, 0x53, 0x67, 0x5e, 0x67, 0x48, 0x67, 0x69, 0x67, 0xa5, 0x67, 0x87, 0x67, 0x6a, 0x67, 0x73, 0x67, 0x98, 0x67, 0xa7, 0x67, 0x75, 0x67, 0xa8, 0x67, 0x9e, 0x67, 0xad, 0x67, 0x8b, 0x67, 0x77, 0x67, 0x7c, 0x67, 0xf0, 0x67, 0x09, 0x68, 0xd8, 0x67, 0x0a, 0x68, 0xe9, 0x67, 0xb0, 0x67, 0x0c, 0x68, 0xd9, 0x67, 0xb5, 0x67, 0xda, 0x67, 0xb3, 0x67, 0xdd, 0x67, 0x00, 0x68, 0xc3, 0x67, 0xb8, 0x67, 0xe2, 0x67, 0x0e, 0x68, 0xc1, 0x67, 0xfd, 0x67, 0x32, 0x68, 0x33, 0x68, 0x60, 0x68, 0x61, 0x68, 0x4e, 0x68, 0x62, 0x68, 0x44, 0x68, 0x64, 0x68, 0x83, 0x68, 0x1d, 0x68, 0x55, 0x68, 0x66, 0x68, 0x41, 0x68, 0x67, 0x68, 0x40, 0x68, 0x3e, 0x68, 0x4a, 0x68, 0x49, 0x68, 0x29, 0x68, 0xb5, 0x68, 0x8f, 0x68, 0x74, 0x68, 0x77, 0x68, 0x93, 0x68, 0x6b, 0x68, 0xc2, 0x68, 0x6e, 0x69, 0xfc, 0x68, 0x1f, 0x69, 0x20, 0x69, 0xf9, 0x68, 0x24, 0x69, 0xf0, 0x68, 0x0b, 0x69, 0x01, 0x69, 0x57, 0x69, 0xe3, 0x68, 0x10, 0x69, 0x71, 0x69, 0x39, 0x69, 0x60, 0x69, 0x42, 0x69, 0x5d, 0x69, 0x84, 0x69, 0x6b, 0x69, 0x80, 0x69, 0x98, 0x69, 0x78, 0x69, 0x34, 0x69, 0xcc, 0x69, 0x87, 0x69, 0x88, 0x69, 0xce, 0x69, 0x89, 0x69, 0x66, 0x69, 0x63, 0x69, 0x79, 0x69, 0x9b, 0x69, 0xa7, 0x69, 0xbb, 0x69, 0xab, 0x69, 0xad, 0x69, 0xd4, 0x69, 0xb1, 0x69, 0xc1, 0x69, 0xca, 0x69, 0xdf, 0x69, 0x95, 0x69, 0xe0, 0x69, 0x8d, 0x69, 0xff, 0x69, 0x2f, 0x6a, 0xed, 0x69, 0x17, 0x6a, 0x18, 0x6a, 0x65, 0x6a, 0xf2, 0x69, 0x44, 0x6a, 0x3e, 0x6a, 0xa0, 0x6a, 0x50, 0x6a, 0x5b, 0x6a, 0x35, 0x6a, 0x8e, 0x6a, 0x79, 0x6a, 0x3d, 0x6a, 0x28, 0x6a, 0x58, 0x6a, 0x7c, 0x6a, 0x91, 0x6a, 0x90, 0x6a, 0xa9, 0x6a, 0x97, 0x6a, 0xab, 0x6a, 0x37, 0x73, 0x52, 0x73, 0x81, 0x6b, 0x82, 0x6b, 0x87, 0x6b, 0x84, 0x6b, 0x92, 0x6b, 0x93, 0x6b, 0x8d, 0x6b, 0x9a, 0x6b, 0x9b, 0x6b, 0xa1, 0x6b, 0xaa, 0x6b, 0x6b, 0x8f, 0x6d, 0x8f, 0x71, 0x8f, 0x72, 0x8f, 0x73, 0x8f, 0x75, 0x8f, 0x76, 0x8f, 0x78, 0x8f, 0x77, 0x8f, 0x79, 0x8f, 0x7a, 0x8f, 0x7c, 0x8f, 0x7e, 0x8f, 0x81, 0x8f, 0x82, 0x8f, 0x84, 0x8f, 0x87, 0x8f, 0x8b, 0x8f, 0x8d, 0x8f, 0x8e, 0x8f, 0x8f, 0x8f, 0x98, 0x8f, 0x9a, 0x8f, 0xce, 0x8e, 0x0b, 0x62, 0x17, 0x62, 0x1b, 0x62, 0x1f, 0x62, 0x22, 0x62, 0x21, 0x62, 0x25, 0x62, 0x24, 0x62, 0x2c, 0x62, 0xe7, 0x81, 0xef, 0x74, 0xf4, 0x74, 0xff, 0x74, 0x0f, 0x75, 0x11, 0x75, 0x13, 0x75, 0x34, 0x65, 0xee, 0x65, 0xef, 0x65, 0xf0, 0x65, 0x0a, 0x66, 0x19, 0x66, 0x72, 0x67, 0x03, 0x66, 0x15, 0x66, 0x00, 0x66, 0x85, 0x70, 0xf7, 0x66, 0x1d, 0x66, 0x34, 0x66, 0x31, 0x66, 0x36, 0x66, 0x35, 0x66, 0x06, 0x80, 0x5f, 0x66, 0x54, 0x66, 0x41, 0x66, 0x4f, 0x66, 0x56, 0x66, 0x61, 0x66, 0x57, 0x66, 0x77, 0x66, 0x84, 0x66, 0x8c, 0x66, 0xa7, 0x66, 0x9d, 0x66, 0xbe, 0x66, 0xdb, 0x66, 0xdc, 0x66, 0xe6, 0x66, 0xe9, 0x66, 0x32, 0x8d, 0x33, 0x8d, 0x36, 0x8d, 0x3b, 0x8d, 0x3d, 0x8d, 0x40, 0x8d, 0x45, 0x8d, 0x46, 0x8d, 0x48, 0x8d, 0x49, 0x8d, 0x47, 0x8d, 0x4d, 0x8d, 0x55, 0x8d, 0x59, 0x8d, 0xc7, 0x89, 0xca, 0x89, 0xcb, 0x89, 0xcc, 0x89, 0xce, 0x89, 0xcf, 0x89, 0xd0, 0x89, 0xd1, 0x89, 0x6e, 0x72, 0x9f, 0x72, 0x5d, 0x72, 0x66, 0x72, 0x6f, 0x72, 0x7e, 0x72, 0x7f, 0x72, 0x84, 0x72, 0x8b, 0x72, 0x8d, 0x72, 0x8f, 0x72, 0x92, 0x72, 0x08, 0x63, 0x32, 0x63, 0xb0, 0x63, 0x3f, 0x64, 0xd8, 0x64, 0x04, 0x80, 0xea, 0x6b, 0xf3, 0x6b, 0xfd, 0x6b, 0xf5, 0x6b, 0xf9, 0x6b, 0x05, 0x6c, 0x07, 0x6c, 0x06, 0x6c, 0x0d, 0x6c, 0x15, 0x6c, 0x18, 0x6c, 0x19, 0x6c, 0x1a, 0x6c, 0x21, 0x6c, 0x29, 0x6c, 0x24, 0x6c, 0x2a, 0x6c, 0x32, 0x6c, 0x35, 0x65, 0x55, 0x65, 0x6b, 0x65, 0x4d, 0x72, 0x52, 0x72, 0x56, 0x72, 0x30, 0x72, 0x62, 0x86, 0x16, 0x52, 0x9f, 0x80, 0x9c, 0x80, 0x93, 0x80, 0xbc, 0x80, 0x0a, 0x67, 0xbd, 0x80, 0xb1, 0x80, 0xab, 0x80, 0xad, 0x80, 0xb4, 0x80, 0xb7, 0x80, 0xe7, 0x80, 0xe8, 0x80, 0xe9, 0x80, 0xea, 0x80, 0xdb, 0x80, 0xc2, 0x80, 0xc4, 0x80, 0xd9, 0x80, 0xcd, 0x80, 0xd7, 0x80, 0x10, 0x67, 0xdd, 0x80, 0xeb, 0x80, 0xf1, 0x80, 0xf4, 0x80, 0xed, 0x80, 0x0d, 0x81, 0x0e, 0x81, 0xf2, 0x80, 0xfc, 0x80, 0x15, 0x67, 0x12, 0x81, 0x5a, 0x8c, 0x36, 0x81, 0x1e, 0x81, 0x2c, 0x81, 0x18, 0x81, 0x32, 0x81, 0x48, 0x81, 0x4c, 0x81, 0x53, 0x81, 0x74, 0x81, 0x59, 0x81, 0x5a, 0x81, 0x71, 0x81, 0x60, 0x81, 0x69, 0x81, 0x7c, 0x81, 0x7d, 0x81, 0x6d, 0x81, 0x67, 0x81, 0x4d, 0x58, 0xb5, 0x5a, 0x88, 0x81, 0x82, 0x81, 0x91, 0x81, 0xd5, 0x6e, 0xa3, 0x81, 0xaa, 0x81, 0xcc, 0x81, 0x26, 0x67, 0xca, 0x81, 0xbb, 0x81, 0xc1, 0x81, 0xa6, 0x81, 0x24, 0x6b, 0x37, 0x6b, 0x39, 0x6b, 0x43, 0x6b, 0x46, 0x6b, 0x59, 0x6b, 0xd1, 0x98, 0xd2, 0x98, 0xd3, 0x98, 0xd5, 0x98, 0xd9, 0x98, 0xda, 0x98, 0xb3, 0x6b, 0x40, 0x5f, 0xc2, 0x6b, 0xf3, 0x89, 0x90, 0x65, 0x51, 0x9f, 0x93, 0x65, 0xbc, 0x65, 0xc6, 0x65, 0xc4, 0x65, 0xc3, 0x65, 0xcc, 0x65, 0xce, 0x65, 0xd2, 0x65, 0xd6, 0x65, 0x80, 0x70, 0x9c, 0x70, 0x96, 0x70, 0x9d, 0x70, 0xbb, 0x70, 0xc0, 0x70, 0xb7, 0x70, 0xab, 0x70, 0xb1, 0x70, 0xe8, 0x70, 0xca, 0x70, 0x10, 0x71, 0x13, 0x71, 0x16, 0x71, 0x2f, 0x71, 0x31, 0x71, 0x73, 0x71, 0x5c, 0x71, 0x68, 0x71, 0x45, 0x71, 0x72, 0x71, 0x4a, 0x71, 0x78, 0x71, 0x7a, 0x71, 0x98, 0x71, 0xb3, 0x71, 0xb5, 0x71, 0xa8, 0x71, 0xa0, 0x71, 0xe0, 0x71, 0xd4, 0x71, 0xe7, 0x71, 0xf9, 0x71, 0x1d, 0x72, 0x28, 0x72, 0x6c, 0x70, 0x18, 0x71, 0x66, 0x71, 0xb9, 0x71, 0x3e, 0x62, 0x3d, 0x62, 0x43, 0x62, 0x48, 0x62, 0x49, 0x62, 0x3b, 0x79, 0x40, 0x79, 0x46, 0x79, 0x49, 0x79, 0x5b, 0x79, 0x5c, 0x79, 0x53, 0x79, 0x5a, 0x79, 0x62, 0x79, 0x57, 0x79, 0x60, 0x79, 0x6f, 0x79, 0x67, 0x79, 0x7a, 0x79, 0x85, 0x79, 0x8a, 0x79, 0x9a, 0x79, 0xa7, 0x79, 0xb3, 0x79, 0xd1, 0x5f, 0xd0, 0x5f, 0x3c, 0x60, 0x5d, 0x60, 0x5a, 0x60, 0x67, 0x60, 0x41, 0x60, 0x59, 0x60, 0x63, 0x60, 0xab, 0x60, 0x06, 0x61, 0x0d, 0x61, 0x5d, 0x61, 0xa9, 0x61, 0x9d, 0x61, 0xcb, 0x61, 0xd1, 0x61, 0x06, 0x62, 0x80, 0x80, 0x7f, 0x80, 0x93, 0x6c, 0xf6, 0x6c, 0xfc, 0x6d, 0xf6, 0x77, 0xf8, 0x77, 0x00, 0x78, 0x09, 0x78, 0x17, 0x78, 0x18, 0x78, 0x11, 0x78, 0xab, 0x65, 0x2d, 0x78, 0x1c, 0x78, 0x1d, 0x78, 0x39, 0x78, 0x3a, 0x78, 0x3b, 0x78, 0x1f, 0x78, 0x3c, 0x78, 0x25, 0x78, 0x2c, 0x78, 0x23, 0x78, 0x29, 0x78, 0x4e, 0x78, 0x6d, 0x78, 0x56, 0x78, 0x57, 0x78, 0x26, 0x78, 0x50, 0x78, 0x47, 0x78, 0x4c, 0x78, 0x6a, 0x78, 0x9b, 0x78, 0x93, 0x78, 0x9a, 0x78, 0x87, 0x78, 0x9c, 0x78, 0xa1, 0x78, 0xa3, 0x78, 0xb2, 0x78, 0xb9, 0x78, 0xa5, 0x78, 0xd4, 0x78, 0xd9, 0x78, 0xc9, 0x78, 0xec, 0x78, 0xf2, 0x78, 0x05, 0x79, 0xf4, 0x78, 0x13, 0x79, 0x24, 0x79, 0x1e, 0x79, 0x34, 0x79, 0x9b, 0x9f, 0xf9, 0x9e, 0xfb, 0x9e, 0xfc, 0x9e, 0xf1, 0x76, 0x04, 0x77, 0x0d, 0x77, 0xf9, 0x76, 0x07, 0x77, 0x08, 0x77, 0x1a, 0x77, 0x22, 0x77, 0x19, 0x77, 0x2d, 0x77, 0x26, 0x77, 0x35, 0x77, 0x38, 0x77, 0x50, 0x77, 0x51, 0x77, 0x47, 0x77, 0x43, 0x77, 0x5a, 0x77, 0x68, 0x77, 0x62, 0x77, 0x65, 0x77, 0x7f, 0x77, 0x8d, 0x77, 0x7d, 0x77, 0x80, 0x77, 0x8c, 0x77, 0x91, 0x77, 0x9f, 0x77, 0xa0, 0x77, 0xb0, 0x77, 0xb5, 0x77, 0xbd, 0x77, 0x3a, 0x75, 0x40, 0x75, 0x4e, 0x75, 0x4b, 0x75, 0x48, 0x75, 0x5b, 0x75, 0x72, 0x75, 0x79, 0x75, 0x83, 0x75, 0x58, 0x7f, 0x61, 0x7f, 0x5f, 0x7f, 0x48, 0x8a, 0x68, 0x7f, 0x74, 0x7f, 0x71, 0x7f, 0x79, 0x7f, 0x81, 0x7f, 0x7e, 0x7f, 0xcd, 0x76, 0xe5, 0x76, 0x32, 0x88, 0x85, 0x94, 0x86, 0x94, 0x87, 0x94, 0x8b, 0x94, 0x8a, 0x94, 0x8c, 0x94, 0x8d, 0x94, 0x8f, 0x94, 0x90, 0x94, 0x94, 0x94, 0x97, 0x94, 0x95, 0x94, 0x9a, 0x94, 0x9b, 0x94, 0x9c, 0x94, 0xa3, 0x94, 0xa4, 0x94, 0xab, 0x94, 0xaa, 0x94, 0xad, 0x94, 0xac, 0x94, 0xaf, 0x94, 0xb0, 0x94, 0xb2, 0x94, 0xb4, 0x94, 0xb6, 0x94, 0xb7, 0x94, 0xb8, 0x94, 0xb9, 0x94, 0xba, 0x94, 0xbc, 0x94, 0xbd, 0x94, 0xbf, 0x94, 0xc4, 0x94, 0xc8, 0x94, 0xc9, 0x94, 0xca, 0x94, 0xcb, 0x94, 0xcc, 0x94, 0xcd, 0x94, 0xce, 0x94, 0xd0, 0x94, 0xd1, 0x94, 0xd2, 0x94, 0xd5, 0x94, 0xd6, 0x94, 0xd7, 0x94, 0xd9, 0x94, 0xd8, 0x94, 0xdb, 0x94, 0xde, 0x94, 0xdf, 0x94, 0xe0, 0x94, 0xe2, 0x94, 0xe4, 0x94, 0xe5, 0x94, 0xe7, 0x94, 0xe8, 0x94, 0xea, 0x94, 0xe9, 0x94, 0xeb, 0x94, 0xee, 0x94, 0xef, 0x94, 0xf3, 0x94, 0xf4, 0x94, 0xf5, 0x94, 0xf7, 0x94, 0xf9, 0x94, 0xfc, 0x94, 0xfd, 0x94, 0xff, 0x94, 0x03, 0x95, 0x02, 0x95, 0x06, 0x95, 0x07, 0x95, 0x09, 0x95, 0x0a, 0x95, 0x0d, 0x95, 0x0e, 0x95, 0x0f, 0x95, 0x12, 0x95, 0x13, 0x95, 0x14, 0x95, 0x15, 0x95, 0x16, 0x95, 0x18, 0x95, 0x1b, 0x95, 0x1d, 0x95, 0x1e, 0x95, 0x1f, 0x95, 0x22, 0x95, 0x2a, 0x95, 0x2b, 0x95, 0x29, 0x95, 0x2c, 0x95, 0x31, 0x95, 0x32, 0x95, 0x34, 0x95, 0x36, 0x95, 0x37, 0x95, 0x38, 0x95, 0x3c, 0x95, 0x3e, 0x95, 0x3f, 0x95, 0x42, 0x95, 0x35, 0x95, 0x44, 0x95, 0x45, 0x95, 0x46, 0x95, 0x49, 0x95, 0x4c, 0x95, 0x4e, 0x95, 0x4f, 0x95, 0x52, 0x95, 0x53, 0x95, 0x54, 0x95, 0x56, 0x95, 0x57, 0x95, 0x58, 0x95, 0x59, 0x95, 0x5b, 0x95, 0x5e, 0x95, 0x5f, 0x95, 0x5d, 0x95, 0x61, 0x95, 0x62, 0x95, 0x64, 0x95, 0x65, 0x95, 0x66, 0x95, 0x67, 0x95, 0x68, 0x95, 0x69, 0x95, 0x6a, 0x95, 0x6b, 0x95, 0x6c, 0x95, 0x6f, 0x95, 0x71, 0x95, 0x72, 0x95, 0x73, 0x95, 0x3a, 0x95, 0xe7, 0x77, 0xec, 0x77, 0xc9, 0x96, 0xd5, 0x79, 0xed, 0x79, 0xe3, 0x79, 0xeb, 0x79, 0x06, 0x7a, 0x47, 0x5d, 0x03, 0x7a, 0x02, 0x7a, 0x1e, 0x7a, 0x14, 0x7a, 0x39, 0x7a, 0x37, 0x7a, 0x51, 0x7a, 0xcf, 0x9e, 0xa5, 0x99, 0x70, 0x7a, 0x88, 0x76, 0x8e, 0x76, 0x93, 0x76, 0x99, 0x76, 0xa4, 0x76, 0xde, 0x74, 0xe0, 0x74, 0x2c, 0x75, 0x20, 0x9e, 0x22, 0x9e, 0x28, 0x9e, 0x29, 0x9e, 0x2a, 0x9e, 0x2b, 0x9e, 0x2c, 0x9e, 0x32, 0x9e, 0x31, 0x9e, 0x36, 0x9e, 0x38, 0x9e, 0x37, 0x9e, 0x39, 0x9e, 0x3a, 0x9e, 0x3e, 0x9e, 0x41, 0x9e, 0x42, 0x9e, 0x44, 0x9e, 0x46, 0x9e, 0x47, 0x9e, 0x48, 0x9e, 0x49, 0x9e, 0x4b, 0x9e, 0x4c, 0x9e, 0x4e, 0x9e, 0x51, 0x9e, 0x55, 0x9e, 0x57, 0x9e, 0x5a, 0x9e, 0x5b, 0x9e, 0x5c, 0x9e, 0x5e, 0x9e, 0x63, 0x9e, 0x66, 0x9e, 0x67, 0x9e, 0x68, 0x9e, 0x69, 0x9e, 0x6a, 0x9e, 0x6b, 0x9e, 0x6c, 0x9e, 0x71, 0x9e, 0x6d, 0x9e, 0x73, 0x9e, 0x92, 0x75, 0x94, 0x75, 0x96, 0x75, 0xa0, 0x75, 0x9d, 0x75, 0xac, 0x75, 0xa3, 0x75, 0xb3, 0x75, 0xb4, 0x75, 0xb8, 0x75, 0xc4, 0x75, 0xb1, 0x75, 0xb0, 0x75, 0xc3, 0x75, 0xc2, 0x75, 0xd6, 0x75, 0xcd, 0x75, 0xe3, 0x75, 0xe8, 0x75, 0xe6, 0x75, 0xe4, 0x75, 0xeb, 0x75, 0xe7, 0x75, 0x03, 0x76, 0xf1, 0x75, 0xfc, 0x75, 0xff, 0x75, 0x10, 0x76, 0x00, 0x76, 0x05, 0x76, 0x0c, 0x76, 0x17, 0x76, 0x0a, 0x76, 0x25, 0x76, 0x18, 0x76, 0x15, 0x76, 0x19, 0x76, 0x1b, 0x76, 0x3c, 0x76, 0x22, 0x76, 0x20, 0x76, 0x40, 0x76, 0x2d, 0x76, 0x30, 0x76, 0x3f, 0x76, 0x35, 0x76, 0x43, 0x76, 0x3e, 0x76, 0x33, 0x76, 0x4d, 0x76, 0x5e, 0x76, 0x54, 0x76, 0x5c, 0x76, 0x56, 0x76, 0x6b, 0x76, 0x6f, 0x76, 0xca, 0x7f, 0xe6, 0x7a, 0x78, 0x7a, 0x79, 0x7a, 0x80, 0x7a, 0x86, 0x7a, 0x88, 0x7a, 0x95, 0x7a, 0xa6, 0x7a, 0xa0, 0x7a, 0xac, 0x7a, 0xa8, 0x7a, 0xad, 0x7a, 0xb3, 0x7a, 0x64, 0x88, 0x69, 0x88, 0x72, 0x88, 0x7d, 0x88, 0x7f, 0x88, 0x82, 0x88, 0xa2, 0x88, 0xc6, 0x88, 0xb7, 0x88, 0xbc, 0x88, 0xc9, 0x88, 0xe2, 0x88, 0xce, 0x88, 0xe3, 0x88, 0xe5, 0x88, 0xf1, 0x88, 0x1a, 0x89, 0xfc, 0x88, 0xe8, 0x88, 0xfe, 0x88, 0xf0, 0x88, 0x21, 0x89, 0x19, 0x89, 0x13, 0x89, 0x1b, 0x89, 0x0a, 0x89, 0x34, 0x89, 0x2b, 0x89, 0x36, 0x89, 0x41, 0x89, 0x66, 0x89, 0x7b, 0x89, 0x8b, 0x75, 0xe5, 0x80, 0xb2, 0x76, 0xb4, 0x76, 0xdc, 0x77, 0x12, 0x80, 0x14, 0x80, 0x16, 0x80, 0x1c, 0x80, 0x20, 0x80, 0x22, 0x80, 0x25, 0x80, 0x26, 0x80, 0x27, 0x80, 0x29, 0x80, 0x28, 0x80, 0x31, 0x80, 0x0b, 0x80, 0x35, 0x80, 0x43, 0x80, 0x46, 0x80, 0x4d, 0x80, 0x52, 0x80, 0x69, 0x80, 0x71, 0x80, 0x83, 0x89, 0x78, 0x98, 0x80, 0x98, 0x83, 0x98, 0x89, 0x98, 0x8c, 0x98, 0x8d, 0x98, 0x8f, 0x98, 0x94, 0x98, 0x9a, 0x98, 0x9b, 0x98, 0x9e, 0x98, 0x9f, 0x98, 0xa1, 0x98, 0xa2, 0x98, 0xa5, 0x98, 0xa6, 0x98, 0x4d, 0x86, 0x54, 0x86, 0x6c, 0x86, 0x6e, 0x86, 0x7f, 0x86, 0x7a, 0x86, 0x7c, 0x86, 0x7b, 0x86, 0xa8, 0x86, 0x8d, 0x86, 0x8b, 0x86, 0xac, 0x86, 0x9d, 0x86, 0xa7, 0x86, 0xa3, 0x86, 0xaa, 0x86, 0x93, 0x86, 0xa9, 0x86, 0xb6, 0x86, 0xc4, 0x86, 0xb5, 0x86, 0xce, 0x86, 0xb0, 0x86, 0xba, 0x86, 0xb1, 0x86, 0xaf, 0x86, 0xc9, 0x86, 0xcf, 0x86, 0xb4, 0x86, 0xe9, 0x86, 0xf1, 0x86, 0xf2, 0x86, 0xed, 0x86, 0xf3, 0x86, 0xd0, 0x86, 0x13, 0x87, 0xde, 0x86, 0xf4, 0x86, 0xdf, 0x86, 0xd8, 0x86, 0xd1, 0x86, 0x03, 0x87, 0x07, 0x87, 0xf8, 0x86, 0x08, 0x87, 0x0a, 0x87, 0x0d, 0x87, 0x09, 0x87, 0x23, 0x87, 0x3b, 0x87, 0x1e, 0x87, 0x25, 0x87, 0x2e, 0x87, 0x1a, 0x87, 0x3e, 0x87, 0x48, 0x87, 0x34, 0x87, 0x31, 0x87, 0x29, 0x87, 0x37, 0x87, 0x3f, 0x87, 0x82, 0x87, 0x22, 0x87, 0x7d, 0x87, 0x7e, 0x87, 0x7b, 0x87, 0x60, 0x87, 0x70, 0x87, 0x4c, 0x87, 0x6e, 0x87, 0x8b, 0x87, 0x53, 0x87, 0x63, 0x87, 0x7c, 0x87, 0x64, 0x87, 0x59, 0x87, 0x65, 0x87, 0x93, 0x87, 0xaf, 0x87, 0xa8, 0x87, 0xd2, 0x87, 0xc6, 0x87, 0x88, 0x87, 0x85, 0x87, 0xad, 0x87, 0x97, 0x87, 0x83, 0x87, 0xab, 0x87, 0xe5, 0x87, 0xac, 0x87, 0xb5, 0x87, 0xb3, 0x87, 0xcb, 0x87, 0xd3, 0x87, 0xbd, 0x87, 0xd1, 0x87, 0xc0, 0x87, 0xca, 0x87, 0xdb, 0x87, 0xea, 0x87, 0xe0, 0x87, 0xee, 0x87, 0x16, 0x88, 0x13, 0x88, 0xfe, 0x87, 0x0a, 0x88, 0x1b, 0x88, 0x21, 0x88, 0x39, 0x88, 0x3c, 0x88, 0x36, 0x7f, 0x42, 0x7f, 0x44, 0x7f, 0x45, 0x7f, 0x10, 0x82, 0xfa, 0x7a, 0xfd, 0x7a, 0x08, 0x7b, 0x03, 0x7b, 0x04, 0x7b, 0x15, 0x7b, 0x0a, 0x7b, 0x2b, 0x7b, 0x0f, 0x7b, 0x47, 0x7b, 0x38, 0x7b, 0x2a, 0x7b, 0x19, 0x7b, 0x2e, 0x7b, 0x31, 0x7b, 0x20, 0x7b, 0x25, 0x7b, 0x24, 0x7b, 0x33, 0x7b, 0x3e, 0x7b, 0x1e, 0x7b, 0x58, 0x7b, 0x5a, 0x7b, 0x45, 0x7b, 0x75, 0x7b, 0x4c, 0x7b, 0x5d, 0x7b, 0x60, 0x7b, 0x6e, 0x7b, 0x7b, 0x7b, 0x62, 0x7b, 0x72, 0x7b, 0x71, 0x7b, 0x90, 0x7b, 0xa6, 0x7b, 0xa7, 0x7b, 0xb8, 0x7b, 0xac, 0x7b, 0x9d, 0x7b, 0xa8, 0x7b, 0x85, 0x7b, 0xaa, 0x7b, 0x9c, 0x7b, 0xa2, 0x7b, 0xab, 0x7b, 0xb4, 0x7b, 0xd1, 0x7b, 0xc1, 0x7b, 0xcc, 0x7b, 0xdd, 0x7b, 0xda, 0x7b, 0xe5, 0x7b, 0xe6, 0x7b, 0xea, 0x7b, 0x0c, 0x7c, 0xfe, 0x7b, 0xfc, 0x7b, 0x0f, 0x7c, 0x16, 0x7c, 0x0b, 0x7c, 0x1f, 0x7c, 0x2a, 0x7c, 0x26, 0x7c, 0x38, 0x7c, 0x41, 0x7c, 0x40, 0x7c, 0xfe, 0x81, 0x01, 0x82, 0x02, 0x82, 0x04, 0x82, 0xec, 0x81, 0x44, 0x88, 0x21, 0x82, 0x22, 0x82, 0x23, 0x82, 0x2d, 0x82, 0x2f, 0x82, 0x28, 0x82, 0x2b, 0x82, 0x38, 0x82, 0x3b, 0x82, 0x33, 0x82, 0x34, 0x82, 0x3e, 0x82, 0x44, 0x82, 0x49, 0x82, 0x4b, 0x82, 0x4f, 0x82, 0x5a, 0x82, 0x5f, 0x82, 0x68, 0x82, 0x7e, 0x88, 0x85, 0x88, 0x88, 0x88, 0xd8, 0x88, 0xdf, 0x88, 0x5e, 0x89, 0x9d, 0x7f, 0x9f, 0x7f, 0xa7, 0x7f, 0xaf, 0x7f, 0xb0, 0x7f, 0xb2, 0x7f, 0x7c, 0x7c, 0x49, 0x65, 0x91, 0x7c, 0x9d, 0x7c, 0x9c, 0x7c, 0x9e, 0x7c, 0xa2, 0x7c, 0xb2, 0x7c, 0xbc, 0x7c, 0xbd, 0x7c, 0xc1, 0x7c, 0xc7, 0x7c, 0xcc, 0x7c, 0xcd, 0x7c, 0xc8, 0x7c, 0xc5, 0x7c, 0xd7, 0x7c, 0xe8, 0x7c, 0x6e, 0x82, 0xa8, 0x66, 0xbf, 0x7f, 0xce, 0x7f, 0xd5, 0x7f, 0xe5, 0x7f, 0xe1, 0x7f, 0xe6, 0x7f, 0xe9, 0x7f, 0xee, 0x7f, 0xf3, 0x7f, 0xf8, 0x7c, 0x77, 0x7d, 0xa6, 0x7d, 0xae, 0x7d, 0x47, 0x7e, 0x9b, 0x7e, 0xb8, 0x9e, 0xb4, 0x9e, 0x73, 0x8d, 0x84, 0x8d, 0x94, 0x8d, 0x91, 0x8d, 0xb1, 0x8d, 0x67, 0x8d, 0x6d, 0x8d, 0x47, 0x8c, 0x49, 0x8c, 0x4a, 0x91, 0x50, 0x91, 0x4e, 0x91, 0x4f, 0x91, 0x64, 0x91, 0x62, 0x91, 0x61, 0x91, 0x70, 0x91, 0x69, 0x91, 0x6f, 0x91, 0x7d, 0x91, 0x7e, 0x91, 0x72, 0x91, 0x74, 0x91, 0x79, 0x91, 0x8c, 0x91, 0x85, 0x91, 0x90, 0x91, 0x8d, 0x91, 0x91, 0x91, 0xa2, 0x91, 0xa3, 0x91, 0xaa, 0x91, 0xad, 0x91, 0xae, 0x91, 0xaf, 0x91, 0xb5, 0x91, 0xb4, 0x91, 0xba, 0x91, 0x55, 0x8c, 0x7e, 0x9e, 0xb8, 0x8d, 0xeb, 0x8d, 0x05, 0x8e, 0x59, 0x8e, 0x69, 0x8e, 0xb5, 0x8d, 0xbf, 0x8d, 0xbc, 0x8d, 0xba, 0x8d, 0xc4, 0x8d, 0xd6, 0x8d, 0xd7, 0x8d, 0xda, 0x8d, 0xde, 0x8d, 0xce, 0x8d, 0xcf, 0x8d, 0xdb, 0x8d, 0xc6, 0x8d, 0xec, 0x8d, 0xf7, 0x8d, 0xf8, 0x8d, 0xe3, 0x8d, 0xf9, 0x8d, 0xfb, 0x8d, 0xe4, 0x8d, 0x09, 0x8e, 0xfd, 0x8d, 0x14, 0x8e, 0x1d, 0x8e, 0x1f, 0x8e, 0x2c, 0x8e, 0x2e, 0x8e, 0x23, 0x8e, 0x2f, 0x8e, 0x3a, 0x8e, 0x40, 0x8e, 0x39, 0x8e, 0x35, 0x8e, 0x3d, 0x8e, 0x31, 0x8e, 0x49, 0x8e, 0x41, 0x8e, 0x42, 0x8e, 0x51, 0x8e, 0x52, 0x8e, 0x4a, 0x8e, 0x70, 0x8e, 0x76, 0x8e, 0x7c, 0x8e, 0x6f, 0x8e, 0x74, 0x8e, 0x85, 0x8e, 0x8f, 0x8e, 0x94, 0x8e, 0x90, 0x8e, 0x9c, 0x8e, 0x9e, 0x8e, 0x78, 0x8c, 0x82, 0x8c, 0x8a, 0x8c, 0x85, 0x8c, 0x98, 0x8c, 0x94, 0x8c, 0x9b, 0x65, 0xd6, 0x89, 0xde, 0x89, 0xda, 0x89, 0xdc, 0x89, 0xe5, 0x89, 0xeb, 0x89, 0xef, 0x89, 0x3e, 0x8a, 0x26, 0x8b, 0x53, 0x97, 0xe9, 0x96, 0xf3, 0x96, 0xef, 0x96, 0x06, 0x97, 0x01, 0x97, 0x08, 0x97, 0x0f, 0x97, 0x0e, 0x97, 0x2a, 0x97, 0x2d, 0x97, 0x30, 0x97, 0x3e, 0x97, 0x80, 0x9f, 0x83, 0x9f, 0x85, 0x9f, 0x86, 0x9f, 0x87, 0x9f, 0x88, 0x9f, 0x89, 0x9f, 0x8a, 0x9f, 0x8c, 0x9f, 0xfe, 0x9e, 0x0b, 0x9f, 0x0d, 0x9f, 0xb9, 0x96, 0xbc, 0x96, 0xbd, 0x96, 0xce, 0x96, 0xd2, 0x96, 0xbf, 0x77, 0xe0, 0x96, 0x8e, 0x92, 0xae, 0x92, 0xc8, 0x92, 0x3e, 0x93, 0x6a, 0x93, 0xca, 0x93, 0x8f, 0x93, 0x3e, 0x94, 0x6b, 0x94, 0x7f, 0x9c, 0x82, 0x9c, 0x85, 0x9c, 0x86, 0x9c, 0x87, 0x9c, 0x88, 0x9c, 0x23, 0x7a, 0x8b, 0x9c, 0x8e, 0x9c, 0x90, 0x9c, 0x91, 0x9c, 0x92, 0x9c, 0x94, 0x9c, 0x95, 0x9c, 0x9a, 0x9c, 0x9b, 0x9c, 0x9e, 0x9c, 0x9f, 0x9c, 0xa0, 0x9c, 0xa1, 0x9c, 0xa2, 0x9c, 0xa3, 0x9c, 0xa5, 0x9c, 0xa6, 0x9c, 0xa7, 0x9c, 0xa8, 0x9c, 0xa9, 0x9c, 0xab, 0x9c, 0xad, 0x9c, 0xae, 0x9c, 0xb0, 0x9c, 0xb1, 0x9c, 0xb2, 0x9c, 0xb3, 0x9c, 0xb4, 0x9c, 0xb5, 0x9c, 0xb6, 0x9c, 0xb7, 0x9c, 0xba, 0x9c, 0xbb, 0x9c, 0xbc, 0x9c, 0xbd, 0x9c, 0xc4, 0x9c, 0xc5, 0x9c, 0xc6, 0x9c, 0xc7, 0x9c, 0xca, 0x9c, 0xcb, 0x9c, 0xcc, 0x9c, 0xcd, 0x9c, 0xce, 0x9c, 0xcf, 0x9c, 0xd0, 0x9c, 0xd3, 0x9c, 0xd4, 0x9c, 0xd5, 0x9c, 0xd7, 0x9c, 0xd8, 0x9c, 0xd9, 0x9c, 0xdc, 0x9c, 0xdd, 0x9c, 0xdf, 0x9c, 0xe2, 0x9c, 0x7c, 0x97, 0x85, 0x97, 0x91, 0x97, 0x92, 0x97, 0x94, 0x97, 0xaf, 0x97, 0xab, 0x97, 0xa3, 0x97, 0xb2, 0x97, 0xb4, 0x97, 0xb1, 0x9a, 0xb0, 0x9a, 0xb7, 0x9a, 0x58, 0x9e, 0xb6, 0x9a, 0xba, 0x9a, 0xbc, 0x9a, 0xc1, 0x9a, 0xc0, 0x9a, 0xc5, 0x9a, 0xc2, 0x9a, 0xcb, 0x9a, 0xcc, 0x9a, 0xd1, 0x9a, 0x45, 0x9b, 0x43, 0x9b, 0x47, 0x9b, 0x49, 0x9b, 0x48, 0x9b, 0x4d, 0x9b, 0x51, 0x9b, 0xe8, 0x98, 0x0d, 0x99, 0x2e, 0x99, 0x55, 0x99, 0x54, 0x99, 0xdf, 0x9a, 0xe1, 0x9a, 0xe6, 0x9a, 0xef, 0x9a, 0xeb, 0x9a, 0xfb, 0x9a, 0xed, 0x9a, 0xf9, 0x9a, 0x08, 0x9b, 0x0f, 0x9b, 0x13, 0x9b, 0x1f, 0x9b, 0x23, 0x9b, 0xbd, 0x9e, 0xbe, 0x9e, 0x3b, 0x7e, 0x82, 0x9e, 0x87, 0x9e, 0x88, 0x9e, 0x8b, 0x9e, 0x92, 0x9e, 0xd6, 0x93, 0x9d, 0x9e, 0x9f, 0x9e, 0xdb, 0x9e, 0xdc, 0x9e, 0xdd, 0x9e, 0xe0, 0x9e, 0xdf, 0x9e, 0xe2, 0x9e, 0xe9, 0x9e, 0xe7, 0x9e, 0xe5, 0x9e, 0xea, 0x9e, 0xef, 0x9e, 0x22, 0x9f, 0x2c, 0x9f, 0x2f, 0x9f, 0x39, 0x9f, 0x37, 0x9f, 0x3d, 0x9f, 0x3e, 0x9f, 0x44, 0x9f};
	// uni2gb特殊码表
	public static t_ucs2gb_st[] tab_symucs2gb =
	{
		new t_ucs2gb_st(0x00A4, 0xA1E8),
		new t_ucs2gb_st(0x00A7, 0xA1EC),
		new t_ucs2gb_st(0x00A8, 0xA1A7),
		new t_ucs2gb_st(0x00B0, 0xA1E3),
		new t_ucs2gb_st(0x00B1, 0xA1C0),
		new t_ucs2gb_st(0x00B7, 0xA1A4),
		new t_ucs2gb_st(0x00D7, 0xA1C1),
		new t_ucs2gb_st(0x00E0, 0xA8A4),
		new t_ucs2gb_st(0x00E1, 0xA8A2),
		new t_ucs2gb_st(0x00E8, 0xA8A8),
		new t_ucs2gb_st(0x00E9, 0xA8A6),
		new t_ucs2gb_st(0x00EA, 0xA8BA),
		new t_ucs2gb_st(0x00EC, 0xA8AC),
		new t_ucs2gb_st(0x00ED, 0xA8AA),
		new t_ucs2gb_st(0x00F2, 0xA8B0),
		new t_ucs2gb_st(0x00F3, 0xA8AE),
		new t_ucs2gb_st(0x00F7, 0xA1C2),
		new t_ucs2gb_st(0x00F9, 0xA8B4),
		new t_ucs2gb_st(0x00FA, 0xA8B2),
		new t_ucs2gb_st(0x00FC, 0xA8B9),
		new t_ucs2gb_st(0x0101, 0xA8A1),
		new t_ucs2gb_st(0x0113, 0xA8A5),
		new t_ucs2gb_st(0x011B, 0xA8A7),
		new t_ucs2gb_st(0x012B, 0xA8A9),
		new t_ucs2gb_st(0x0144, 0xA8BD),
		new t_ucs2gb_st(0x0148, 0xA8BE),
		new t_ucs2gb_st(0x014D, 0xA8AD),
		new t_ucs2gb_st(0x016B, 0xA8B1),
		new t_ucs2gb_st(0x01CE, 0xA8A3),
		new t_ucs2gb_st(0x01D0, 0xA8AB),
		new t_ucs2gb_st(0x01D2, 0xA8AF),
		new t_ucs2gb_st(0x01D4, 0xA8B3),
		new t_ucs2gb_st(0x01D6, 0xA8B5),
		new t_ucs2gb_st(0x01D8, 0xA8B6),
		new t_ucs2gb_st(0x01DA, 0xA8B7),
		new t_ucs2gb_st(0x01DC, 0xA8B8),
		new t_ucs2gb_st(0x0251, 0xA8BB),
		new t_ucs2gb_st(0x0261, 0xA8C0),
		new t_ucs2gb_st(0x02C7, 0xA1A6),
		new t_ucs2gb_st(0x02C9, 0xA1A5),
		new t_ucs2gb_st(0x0391, 0xA6A1),
		new t_ucs2gb_st(0x0392, 0xA6A2),
		new t_ucs2gb_st(0x0393, 0xA6A3),
		new t_ucs2gb_st(0x0394, 0xA6A4),
		new t_ucs2gb_st(0x0395, 0xA6A5),
		new t_ucs2gb_st(0x0396, 0xA6A6),
		new t_ucs2gb_st(0x0397, 0xA6A7),
		new t_ucs2gb_st(0x0398, 0xA6A8),
		new t_ucs2gb_st(0x0399, 0xA6A9),
		new t_ucs2gb_st(0x039A, 0xA6AA),
		new t_ucs2gb_st(0x039B, 0xA6AB),
		new t_ucs2gb_st(0x039C, 0xA6AC),
		new t_ucs2gb_st(0x039D, 0xA6AD),
		new t_ucs2gb_st(0x039E, 0xA6AE),
		new t_ucs2gb_st(0x039F, 0xA6AF),
		new t_ucs2gb_st(0x03A0, 0xA6B0),
		new t_ucs2gb_st(0x03A1, 0xA6B1),
		new t_ucs2gb_st(0x03A3, 0xA6B2),
		new t_ucs2gb_st(0x03A4, 0xA6B3),
		new t_ucs2gb_st(0x03A5, 0xA6B4),
		new t_ucs2gb_st(0x03A6, 0xA6B5),
		new t_ucs2gb_st(0x03A7, 0xA6B6),
		new t_ucs2gb_st(0x03A8, 0xA6B7),
		new t_ucs2gb_st(0x03A9, 0xA6B8),
		new t_ucs2gb_st(0x03B1, 0xA6C1),
		new t_ucs2gb_st(0x03B2, 0xA6C2),
		new t_ucs2gb_st(0x03B3, 0xA6C3),
		new t_ucs2gb_st(0x03B4, 0xA6C4),
		new t_ucs2gb_st(0x03B5, 0xA6C5),
		new t_ucs2gb_st(0x03B6, 0xA6C6),
		new t_ucs2gb_st(0x03B7, 0xA6C7),
		new t_ucs2gb_st(0x03B8, 0xA6C8),
		new t_ucs2gb_st(0x03B9, 0xA6C9),
		new t_ucs2gb_st(0x03BA, 0xA6CA),
		new t_ucs2gb_st(0x03BB, 0xA6CB),
		new t_ucs2gb_st(0x03BC, 0xA6CC),
		new t_ucs2gb_st(0x03BD, 0xA6CD),
		new t_ucs2gb_st(0x03BE, 0xA6CE),
		new t_ucs2gb_st(0x03BF, 0xA6CF),
		new t_ucs2gb_st(0x03C0, 0xA6D0),
		new t_ucs2gb_st(0x03C1, 0xA6D1),
		new t_ucs2gb_st(0x03C3, 0xA6D2),
		new t_ucs2gb_st(0x03C4, 0xA6D3),
		new t_ucs2gb_st(0x03C5, 0xA6D4),
		new t_ucs2gb_st(0x03C6, 0xA6D5),
		new t_ucs2gb_st(0x03C7, 0xA6D6),
		new t_ucs2gb_st(0x03C8, 0xA6D7),
		new t_ucs2gb_st(0x03C9, 0xA6D8),
		new t_ucs2gb_st(0x0401, 0xA7A7),
		new t_ucs2gb_st(0x0410, 0xA7A1),
		new t_ucs2gb_st(0x0411, 0xA7A2),
		new t_ucs2gb_st(0x0412, 0xA7A3),
		new t_ucs2gb_st(0x0413, 0xA7A4),
		new t_ucs2gb_st(0x0414, 0xA7A5),
		new t_ucs2gb_st(0x0415, 0xA7A6),
		new t_ucs2gb_st(0x0416, 0xA7A8),
		new t_ucs2gb_st(0x0417, 0xA7A9),
		new t_ucs2gb_st(0x0418, 0xA7AA),
		new t_ucs2gb_st(0x0419, 0xA7AB),
		new t_ucs2gb_st(0x041A, 0xA7AC),
		new t_ucs2gb_st(0x041B, 0xA7AD),
		new t_ucs2gb_st(0x041C, 0xA7AE),
		new t_ucs2gb_st(0x041D, 0xA7AF),
		new t_ucs2gb_st(0x041E, 0xA7B0),
		new t_ucs2gb_st(0x041F, 0xA7B1),
		new t_ucs2gb_st(0x0420, 0xA7B2),
		new t_ucs2gb_st(0x0421, 0xA7B3),
		new t_ucs2gb_st(0x0422, 0xA7B4),
		new t_ucs2gb_st(0x0423, 0xA7B5),
		new t_ucs2gb_st(0x0424, 0xA7B6),
		new t_ucs2gb_st(0x0425, 0xA7B7),
		new t_ucs2gb_st(0x0426, 0xA7B8),
		new t_ucs2gb_st(0x0427, 0xA7B9),
		new t_ucs2gb_st(0x0428, 0xA7BA),
		new t_ucs2gb_st(0x0429, 0xA7BB),
		new t_ucs2gb_st(0x042A, 0xA7BC),
		new t_ucs2gb_st(0x042B, 0xA7BD),
		new t_ucs2gb_st(0x042C, 0xA7BE),
		new t_ucs2gb_st(0x042D, 0xA7BF),
		new t_ucs2gb_st(0x042E, 0xA7C0),
		new t_ucs2gb_st(0x042F, 0xA7C1),
		new t_ucs2gb_st(0x0430, 0xA7D1),
		new t_ucs2gb_st(0x0431, 0xA7D2),
		new t_ucs2gb_st(0x0432, 0xA7D3),
		new t_ucs2gb_st(0x0433, 0xA7D4),
		new t_ucs2gb_st(0x0434, 0xA7D5),
		new t_ucs2gb_st(0x0435, 0xA7D6),
		new t_ucs2gb_st(0x0436, 0xA7D8),
		new t_ucs2gb_st(0x0437, 0xA7D9),
		new t_ucs2gb_st(0x0438, 0xA7DA),
		new t_ucs2gb_st(0x0439, 0xA7DB),
		new t_ucs2gb_st(0x043A, 0xA7DC),
		new t_ucs2gb_st(0x043B, 0xA7DD),
		new t_ucs2gb_st(0x043C, 0xA7DE),
		new t_ucs2gb_st(0x043D, 0xA7DF),
		new t_ucs2gb_st(0x043E, 0xA7E0),
		new t_ucs2gb_st(0x043F, 0xA7E1),
		new t_ucs2gb_st(0x0440, 0xA7E2),
		new t_ucs2gb_st(0x0441, 0xA7E3),
		new t_ucs2gb_st(0x0442, 0xA7E4),
		new t_ucs2gb_st(0x0443, 0xA7E5),
		new t_ucs2gb_st(0x0444, 0xA7E6),
		new t_ucs2gb_st(0x0445, 0xA7E7),
		new t_ucs2gb_st(0x0446, 0xA7E8),
		new t_ucs2gb_st(0x0447, 0xA7E9),
		new t_ucs2gb_st(0x0448, 0xA7EA),
		new t_ucs2gb_st(0x0449, 0xA7EB),
		new t_ucs2gb_st(0x044A, 0xA7EC),
		new t_ucs2gb_st(0x044B, 0xA7ED),
		new t_ucs2gb_st(0x044C, 0xA7EE),
		new t_ucs2gb_st(0x044D, 0xA7EF),
		new t_ucs2gb_st(0x044E, 0xA7F0),
		new t_ucs2gb_st(0x044F, 0xA7F1),
		new t_ucs2gb_st(0x0451, 0xA7D7),
		new t_ucs2gb_st(0x2014, 0xA1AA),
		new t_ucs2gb_st(0x2016, 0xA1AC),
		new t_ucs2gb_st(0x2018, 0xA1AE),
		new t_ucs2gb_st(0x2019, 0xA1AF),
		new t_ucs2gb_st(0x201C, 0xA1B0),
		new t_ucs2gb_st(0x201D, 0xA1B1),
		new t_ucs2gb_st(0x2026, 0xA1AD),
		new t_ucs2gb_st(0x2030, 0xA1EB),
		new t_ucs2gb_st(0x2032, 0xA1E4),
		new t_ucs2gb_st(0x2033, 0xA1E5),
		new t_ucs2gb_st(0x203B, 0xA1F9),
		new t_ucs2gb_st(0x2103, 0xA1E6),
		new t_ucs2gb_st(0x2116, 0xA1ED),
		new t_ucs2gb_st(0x2160, 0xA2F1),
		new t_ucs2gb_st(0x2161, 0xA2F2),
		new t_ucs2gb_st(0x2162, 0xA2F3),
		new t_ucs2gb_st(0x2163, 0xA2F4),
		new t_ucs2gb_st(0x2164, 0xA2F5),
		new t_ucs2gb_st(0x2165, 0xA2F6),
		new t_ucs2gb_st(0x2166, 0xA2F7),
		new t_ucs2gb_st(0x2167, 0xA2F8),
		new t_ucs2gb_st(0x2168, 0xA2F9),
		new t_ucs2gb_st(0x2169, 0xA2FA),
		new t_ucs2gb_st(0x216A, 0xA2FB),
		new t_ucs2gb_st(0x216B, 0xA2FC),
		new t_ucs2gb_st(0x2170, 0xA2A1),
		new t_ucs2gb_st(0x2171, 0xA2A2),
		new t_ucs2gb_st(0x2172, 0xA2A3),
		new t_ucs2gb_st(0x2173, 0xA2A4),
		new t_ucs2gb_st(0x2174, 0xA2A5),
		new t_ucs2gb_st(0x2175, 0xA2A6),
		new t_ucs2gb_st(0x2176, 0xA2A7),
		new t_ucs2gb_st(0x2177, 0xA2A8),
		new t_ucs2gb_st(0x2178, 0xA2A9),
		new t_ucs2gb_st(0x2179, 0xA2AA),
		new t_ucs2gb_st(0x2190, 0xA1FB),
		new t_ucs2gb_st(0x2191, 0xA1FC),
		new t_ucs2gb_st(0x2192, 0xA1FA),
		new t_ucs2gb_st(0x2193, 0xA1FD),
		new t_ucs2gb_st(0x2208, 0xA1CA),
		new t_ucs2gb_st(0x220F, 0xA1C7),
		new t_ucs2gb_st(0x2211, 0xA1C6),
		new t_ucs2gb_st(0x221A, 0xA1CC),
		new t_ucs2gb_st(0x221D, 0xA1D8),
		new t_ucs2gb_st(0x221E, 0xA1DE),
		new t_ucs2gb_st(0x2220, 0xA1CF),
		new t_ucs2gb_st(0x2225, 0xA1CE),
		new t_ucs2gb_st(0x2227, 0xA1C4),
		new t_ucs2gb_st(0x2228, 0xA1C5),
		new t_ucs2gb_st(0x2229, 0xA1C9),
		new t_ucs2gb_st(0x222A, 0xA1C8),
		new t_ucs2gb_st(0x222B, 0xA1D2),
		new t_ucs2gb_st(0x222E, 0xA1D3),
		new t_ucs2gb_st(0x2234, 0xA1E0),
		new t_ucs2gb_st(0x2235, 0xA1DF),
		new t_ucs2gb_st(0x2236, 0xA1C3),
		new t_ucs2gb_st(0x2237, 0xA1CB),
		new t_ucs2gb_st(0x223D, 0xA1D7),
		new t_ucs2gb_st(0x2248, 0xA1D6),
		new t_ucs2gb_st(0x224C, 0xA1D5),
		new t_ucs2gb_st(0x2260, 0xA1D9),
		new t_ucs2gb_st(0x2261, 0xA1D4),
		new t_ucs2gb_st(0x2264, 0xA1DC),
		new t_ucs2gb_st(0x2265, 0xA1DD),
		new t_ucs2gb_st(0x226E, 0xA1DA),
		new t_ucs2gb_st(0x226F, 0xA1DB),
		new t_ucs2gb_st(0x2299, 0xA1D1),
		new t_ucs2gb_st(0x22A5, 0xA1CD),
		new t_ucs2gb_st(0x2312, 0xA1D0),
		new t_ucs2gb_st(0x2460, 0xA2D9),
		new t_ucs2gb_st(0x2461, 0xA2DA),
		new t_ucs2gb_st(0x2462, 0xA2DB),
		new t_ucs2gb_st(0x2463, 0xA2DC),
		new t_ucs2gb_st(0x2464, 0xA2DD),
		new t_ucs2gb_st(0x2465, 0xA2DE),
		new t_ucs2gb_st(0x2466, 0xA2DF),
		new t_ucs2gb_st(0x2467, 0xA2E0),
		new t_ucs2gb_st(0x2468, 0xA2E1),
		new t_ucs2gb_st(0x2469, 0xA2E2),
		new t_ucs2gb_st(0x2474, 0xA2C5),
		new t_ucs2gb_st(0x2475, 0xA2C6),
		new t_ucs2gb_st(0x2476, 0xA2C7),
		new t_ucs2gb_st(0x2477, 0xA2C8),
		new t_ucs2gb_st(0x2478, 0xA2C9),
		new t_ucs2gb_st(0x2479, 0xA2CA),
		new t_ucs2gb_st(0x247A, 0xA2CB),
		new t_ucs2gb_st(0x247B, 0xA2CC),
		new t_ucs2gb_st(0x247C, 0xA2CD),
		new t_ucs2gb_st(0x247D, 0xA2CE),
		new t_ucs2gb_st(0x247E, 0xA2CF),
		new t_ucs2gb_st(0x247F, 0xA2D0),
		new t_ucs2gb_st(0x2480, 0xA2D1),
		new t_ucs2gb_st(0x2481, 0xA2D2),
		new t_ucs2gb_st(0x2482, 0xA2D3),
		new t_ucs2gb_st(0x2483, 0xA2D4),
		new t_ucs2gb_st(0x2484, 0xA2D5),
		new t_ucs2gb_st(0x2485, 0xA2D6),
		new t_ucs2gb_st(0x2486, 0xA2D7),
		new t_ucs2gb_st(0x2487, 0xA2D8),
		new t_ucs2gb_st(0x2488, 0xA2B1),
		new t_ucs2gb_st(0x2489, 0xA2B2),
		new t_ucs2gb_st(0x248A, 0xA2B3),
		new t_ucs2gb_st(0x248B, 0xA2B4),
		new t_ucs2gb_st(0x248C, 0xA2B5),
		new t_ucs2gb_st(0x248D, 0xA2B6),
		new t_ucs2gb_st(0x248E, 0xA2B7),
		new t_ucs2gb_st(0x248F, 0xA2B8),
		new t_ucs2gb_st(0x2490, 0xA2B9),
		new t_ucs2gb_st(0x2491, 0xA2BA),
		new t_ucs2gb_st(0x2492, 0xA2BB),
		new t_ucs2gb_st(0x2493, 0xA2BC),
		new t_ucs2gb_st(0x2494, 0xA2BD),
		new t_ucs2gb_st(0x2495, 0xA2BE),
		new t_ucs2gb_st(0x2496, 0xA2BF),
		new t_ucs2gb_st(0x2497, 0xA2C0),
		new t_ucs2gb_st(0x2498, 0xA2C1),
		new t_ucs2gb_st(0x2499, 0xA2C2),
		new t_ucs2gb_st(0x249A, 0xA2C3),
		new t_ucs2gb_st(0x249B, 0xA2C4),
		new t_ucs2gb_st(0x2500, 0xA9A4),
		new t_ucs2gb_st(0x2501, 0xA9A5),
		new t_ucs2gb_st(0x2502, 0xA9A6),
		new t_ucs2gb_st(0x2503, 0xA9A7),
		new t_ucs2gb_st(0x2504, 0xA9A8),
		new t_ucs2gb_st(0x2505, 0xA9A9),
		new t_ucs2gb_st(0x2506, 0xA9AA),
		new t_ucs2gb_st(0x2507, 0xA9AB),
		new t_ucs2gb_st(0x2508, 0xA9AC),
		new t_ucs2gb_st(0x2509, 0xA9AD),
		new t_ucs2gb_st(0x250A, 0xA9AE),
		new t_ucs2gb_st(0x250B, 0xA9AF),
		new t_ucs2gb_st(0x250C, 0xA9B0),
		new t_ucs2gb_st(0x250D, 0xA9B1),
		new t_ucs2gb_st(0x250E, 0xA9B2),
		new t_ucs2gb_st(0x250F, 0xA9B3),
		new t_ucs2gb_st(0x2510, 0xA9B4),
		new t_ucs2gb_st(0x2511, 0xA9B5),
		new t_ucs2gb_st(0x2512, 0xA9B6),
		new t_ucs2gb_st(0x2513, 0xA9B7),
		new t_ucs2gb_st(0x2514, 0xA9B8),
		new t_ucs2gb_st(0x2515, 0xA9B9),
		new t_ucs2gb_st(0x2516, 0xA9BA),
		new t_ucs2gb_st(0x2517, 0xA9BB),
		new t_ucs2gb_st(0x2518, 0xA9BC),
		new t_ucs2gb_st(0x2519, 0xA9BD),
		new t_ucs2gb_st(0x251A, 0xA9BE),
		new t_ucs2gb_st(0x251B, 0xA9BF),
		new t_ucs2gb_st(0x251C, 0xA9C0),
		new t_ucs2gb_st(0x251D, 0xA9C1),
		new t_ucs2gb_st(0x251E, 0xA9C2),
		new t_ucs2gb_st(0x251F, 0xA9C3),
		new t_ucs2gb_st(0x2520, 0xA9C4),
		new t_ucs2gb_st(0x2521, 0xA9C5),
		new t_ucs2gb_st(0x2522, 0xA9C6),
		new t_ucs2gb_st(0x2523, 0xA9C7),
		new t_ucs2gb_st(0x2524, 0xA9C8),
		new t_ucs2gb_st(0x2525, 0xA9C9),
		new t_ucs2gb_st(0x2526, 0xA9CA),
		new t_ucs2gb_st(0x2527, 0xA9CB),
		new t_ucs2gb_st(0x2528, 0xA9CC),
		new t_ucs2gb_st(0x2529, 0xA9CD),
		new t_ucs2gb_st(0x252A, 0xA9CE),
		new t_ucs2gb_st(0x252B, 0xA9CF),
		new t_ucs2gb_st(0x252C, 0xA9D0),
		new t_ucs2gb_st(0x252D, 0xA9D1),
		new t_ucs2gb_st(0x252E, 0xA9D2),
		new t_ucs2gb_st(0x252F, 0xA9D3),
		new t_ucs2gb_st(0x2530, 0xA9D4),
		new t_ucs2gb_st(0x2531, 0xA9D5),
		new t_ucs2gb_st(0x2532, 0xA9D6),
		new t_ucs2gb_st(0x2533, 0xA9D7),
		new t_ucs2gb_st(0x2534, 0xA9D8),
		new t_ucs2gb_st(0x2535, 0xA9D9),
		new t_ucs2gb_st(0x2536, 0xA9DA),
		new t_ucs2gb_st(0x2537, 0xA9DB),
		new t_ucs2gb_st(0x2538, 0xA9DC),
		new t_ucs2gb_st(0x2539, 0xA9DD),
		new t_ucs2gb_st(0x253A, 0xA9DE),
		new t_ucs2gb_st(0x253B, 0xA9DF),
		new t_ucs2gb_st(0x253C, 0xA9E0),
		new t_ucs2gb_st(0x253D, 0xA9E1),
		new t_ucs2gb_st(0x253E, 0xA9E2),
		new t_ucs2gb_st(0x253F, 0xA9E3),
		new t_ucs2gb_st(0x2540, 0xA9E4),
		new t_ucs2gb_st(0x2541, 0xA9E5),
		new t_ucs2gb_st(0x2542, 0xA9E6),
		new t_ucs2gb_st(0x2543, 0xA9E7),
		new t_ucs2gb_st(0x2544, 0xA9E8),
		new t_ucs2gb_st(0x2545, 0xA9E9),
		new t_ucs2gb_st(0x2546, 0xA9EA),
		new t_ucs2gb_st(0x2547, 0xA9EB),
		new t_ucs2gb_st(0x2548, 0xA9EC),
		new t_ucs2gb_st(0x2549, 0xA9ED),
		new t_ucs2gb_st(0x254A, 0xA9EE),
		new t_ucs2gb_st(0x254B, 0xA9EF),
		new t_ucs2gb_st(0x25A0, 0xA1F6),
		new t_ucs2gb_st(0x25A1, 0xA1F5),
		new t_ucs2gb_st(0x25B2, 0xA1F8),
		new t_ucs2gb_st(0x25B3, 0xA1F7),
		new t_ucs2gb_st(0x25C6, 0xA1F4),
		new t_ucs2gb_st(0x25C7, 0xA1F3),
		new t_ucs2gb_st(0x25CB, 0xA1F0),
		new t_ucs2gb_st(0x25CE, 0xA1F2),
		new t_ucs2gb_st(0x25CF, 0xA1F1),
		new t_ucs2gb_st(0x2605, 0xA1EF),
		new t_ucs2gb_st(0x2606, 0xA1EE),
		new t_ucs2gb_st(0x2640, 0xA1E2),
		new t_ucs2gb_st(0x2642, 0xA1E1),
		new t_ucs2gb_st(0x3000, 0xA1A1),
		new t_ucs2gb_st(0x3001, 0xA1A2),
		new t_ucs2gb_st(0x3002, 0xA1A3),
		new t_ucs2gb_st(0x3003, 0xA1A8),
		new t_ucs2gb_st(0x3005, 0xA1A9),
		new t_ucs2gb_st(0x3008, 0xA1B4),
		new t_ucs2gb_st(0x3009, 0xA1B5),
		new t_ucs2gb_st(0x300A, 0xA1B6),
		new t_ucs2gb_st(0x300B, 0xA1B7),
		new t_ucs2gb_st(0x300C, 0xA1B8),
		new t_ucs2gb_st(0x300D, 0xA1B9),
		new t_ucs2gb_st(0x300E, 0xA1BA),
		new t_ucs2gb_st(0x300F, 0xA1BB),
		new t_ucs2gb_st(0x3010, 0xA1BE),
		new t_ucs2gb_st(0x3011, 0xA1BF),
		new t_ucs2gb_st(0x3013, 0xA1FE),
		new t_ucs2gb_st(0x3014, 0xA1B2),
		new t_ucs2gb_st(0x3015, 0xA1B3),
		new t_ucs2gb_st(0x3016, 0xA1BC),
		new t_ucs2gb_st(0x3017, 0xA1BD),
		new t_ucs2gb_st(0x3041, 0xA4A1),
		new t_ucs2gb_st(0x3042, 0xA4A2),
		new t_ucs2gb_st(0x3043, 0xA4A3),
		new t_ucs2gb_st(0x3044, 0xA4A4),
		new t_ucs2gb_st(0x3045, 0xA4A5),
		new t_ucs2gb_st(0x3046, 0xA4A6),
		new t_ucs2gb_st(0x3047, 0xA4A7),
		new t_ucs2gb_st(0x3048, 0xA4A8),
		new t_ucs2gb_st(0x3049, 0xA4A9),
		new t_ucs2gb_st(0x304A, 0xA4AA),
		new t_ucs2gb_st(0x304B, 0xA4AB),
		new t_ucs2gb_st(0x304C, 0xA4AC),
		new t_ucs2gb_st(0x304D, 0xA4AD),
		new t_ucs2gb_st(0x304E, 0xA4AE),
		new t_ucs2gb_st(0x304F, 0xA4AF),
		new t_ucs2gb_st(0x3050, 0xA4B0),
		new t_ucs2gb_st(0x3051, 0xA4B1),
		new t_ucs2gb_st(0x3052, 0xA4B2),
		new t_ucs2gb_st(0x3053, 0xA4B3),
		new t_ucs2gb_st(0x3054, 0xA4B4),
		new t_ucs2gb_st(0x3055, 0xA4B5),
		new t_ucs2gb_st(0x3056, 0xA4B6),
		new t_ucs2gb_st(0x3057, 0xA4B7),
		new t_ucs2gb_st(0x3058, 0xA4B8),
		new t_ucs2gb_st(0x3059, 0xA4B9),
		new t_ucs2gb_st(0x305A, 0xA4BA),
		new t_ucs2gb_st(0x305B, 0xA4BB),
		new t_ucs2gb_st(0x305C, 0xA4BC),
		new t_ucs2gb_st(0x305D, 0xA4BD),
		new t_ucs2gb_st(0x305E, 0xA4BE),
		new t_ucs2gb_st(0x305F, 0xA4BF),
		new t_ucs2gb_st(0x3060, 0xA4C0),
		new t_ucs2gb_st(0x3061, 0xA4C1),
		new t_ucs2gb_st(0x3062, 0xA4C2),
		new t_ucs2gb_st(0x3063, 0xA4C3),
		new t_ucs2gb_st(0x3064, 0xA4C4),
		new t_ucs2gb_st(0x3065, 0xA4C5),
		new t_ucs2gb_st(0x3066, 0xA4C6),
		new t_ucs2gb_st(0x3067, 0xA4C7),
		new t_ucs2gb_st(0x3068, 0xA4C8),
		new t_ucs2gb_st(0x3069, 0xA4C9),
		new t_ucs2gb_st(0x306A, 0xA4CA),
		new t_ucs2gb_st(0x306B, 0xA4CB),
		new t_ucs2gb_st(0x306C, 0xA4CC),
		new t_ucs2gb_st(0x306D, 0xA4CD),
		new t_ucs2gb_st(0x306E, 0xA4CE),
		new t_ucs2gb_st(0x306F, 0xA4CF),
		new t_ucs2gb_st(0x3070, 0xA4D0),
		new t_ucs2gb_st(0x3071, 0xA4D1),
		new t_ucs2gb_st(0x3072, 0xA4D2),
		new t_ucs2gb_st(0x3073, 0xA4D3),
		new t_ucs2gb_st(0x3074, 0xA4D4),
		new t_ucs2gb_st(0x3075, 0xA4D5),
		new t_ucs2gb_st(0x3076, 0xA4D6),
		new t_ucs2gb_st(0x3077, 0xA4D7),
		new t_ucs2gb_st(0x3078, 0xA4D8),
		new t_ucs2gb_st(0x3079, 0xA4D9),
		new t_ucs2gb_st(0x307A, 0xA4DA),
		new t_ucs2gb_st(0x307B, 0xA4DB),
		new t_ucs2gb_st(0x307C, 0xA4DC),
		new t_ucs2gb_st(0x307D, 0xA4DD),
		new t_ucs2gb_st(0x307E, 0xA4DE),
		new t_ucs2gb_st(0x307F, 0xA4DF),
		new t_ucs2gb_st(0x3080, 0xA4E0),
		new t_ucs2gb_st(0x3081, 0xA4E1),
		new t_ucs2gb_st(0x3082, 0xA4E2),
		new t_ucs2gb_st(0x3083, 0xA4E3),
		new t_ucs2gb_st(0x3084, 0xA4E4),
		new t_ucs2gb_st(0x3085, 0xA4E5),
		new t_ucs2gb_st(0x3086, 0xA4E6),
		new t_ucs2gb_st(0x3087, 0xA4E7),
		new t_ucs2gb_st(0x3088, 0xA4E8),
		new t_ucs2gb_st(0x3089, 0xA4E9),
		new t_ucs2gb_st(0x308A, 0xA4EA),
		new t_ucs2gb_st(0x308B, 0xA4EB),
		new t_ucs2gb_st(0x308C, 0xA4EC),
		new t_ucs2gb_st(0x308D, 0xA4ED),
		new t_ucs2gb_st(0x308E, 0xA4EE),
		new t_ucs2gb_st(0x308F, 0xA4EF),
		new t_ucs2gb_st(0x3090, 0xA4F0),
		new t_ucs2gb_st(0x3091, 0xA4F1),
		new t_ucs2gb_st(0x3092, 0xA4F2),
		new t_ucs2gb_st(0x3093, 0xA4F3),
		new t_ucs2gb_st(0x30A1, 0xA5A1),
		new t_ucs2gb_st(0x30A2, 0xA5A2),
		new t_ucs2gb_st(0x30A3, 0xA5A3),
		new t_ucs2gb_st(0x30A4, 0xA5A4),
		new t_ucs2gb_st(0x30A5, 0xA5A5),
		new t_ucs2gb_st(0x30A6, 0xA5A6),
		new t_ucs2gb_st(0x30A7, 0xA5A7),
		new t_ucs2gb_st(0x30A8, 0xA5A8),
		new t_ucs2gb_st(0x30A9, 0xA5A9),
		new t_ucs2gb_st(0x30AA, 0xA5AA),
		new t_ucs2gb_st(0x30AB, 0xA5AB),
		new t_ucs2gb_st(0x30AC, 0xA5AC),
		new t_ucs2gb_st(0x30AD, 0xA5AD),
		new t_ucs2gb_st(0x30AE, 0xA5AE),
		new t_ucs2gb_st(0x30AF, 0xA5AF),
		new t_ucs2gb_st(0x30B0, 0xA5B0),
		new t_ucs2gb_st(0x30B1, 0xA5B1),
		new t_ucs2gb_st(0x30B2, 0xA5B2),
		new t_ucs2gb_st(0x30B3, 0xA5B3),
		new t_ucs2gb_st(0x30B4, 0xA5B4),
		new t_ucs2gb_st(0x30B5, 0xA5B5),
		new t_ucs2gb_st(0x30B6, 0xA5B6),
		new t_ucs2gb_st(0x30B7, 0xA5B7),
		new t_ucs2gb_st(0x30B8, 0xA5B8),
		new t_ucs2gb_st(0x30B9, 0xA5B9),
		new t_ucs2gb_st(0x30BA, 0xA5BA),
		new t_ucs2gb_st(0x30BB, 0xA5BB),
		new t_ucs2gb_st(0x30BC, 0xA5BC),
		new t_ucs2gb_st(0x30BD, 0xA5BD),
		new t_ucs2gb_st(0x30BE, 0xA5BE),
		new t_ucs2gb_st(0x30BF, 0xA5BF),
		new t_ucs2gb_st(0x30C0, 0xA5C0),
		new t_ucs2gb_st(0x30C1, 0xA5C1),
		new t_ucs2gb_st(0x30C2, 0xA5C2),
		new t_ucs2gb_st(0x30C3, 0xA5C3),
		new t_ucs2gb_st(0x30C4, 0xA5C4),
		new t_ucs2gb_st(0x30C5, 0xA5C5),
		new t_ucs2gb_st(0x30C6, 0xA5C6),
		new t_ucs2gb_st(0x30C7, 0xA5C7),
		new t_ucs2gb_st(0x30C8, 0xA5C8),
		new t_ucs2gb_st(0x30C9, 0xA5C9),
		new t_ucs2gb_st(0x30CA, 0xA5CA),
		new t_ucs2gb_st(0x30CB, 0xA5CB),
		new t_ucs2gb_st(0x30CC, 0xA5CC),
		new t_ucs2gb_st(0x30CD, 0xA5CD),
		new t_ucs2gb_st(0x30CE, 0xA5CE),
		new t_ucs2gb_st(0x30CF, 0xA5CF),
		new t_ucs2gb_st(0x30D0, 0xA5D0),
		new t_ucs2gb_st(0x30D1, 0xA5D1),
		new t_ucs2gb_st(0x30D2, 0xA5D2),
		new t_ucs2gb_st(0x30D3, 0xA5D3),
		new t_ucs2gb_st(0x30D4, 0xA5D4),
		new t_ucs2gb_st(0x30D5, 0xA5D5),
		new t_ucs2gb_st(0x30D6, 0xA5D6),
		new t_ucs2gb_st(0x30D7, 0xA5D7),
		new t_ucs2gb_st(0x30D8, 0xA5D8),
		new t_ucs2gb_st(0x30D9, 0xA5D9),
		new t_ucs2gb_st(0x30DA, 0xA5DA),
		new t_ucs2gb_st(0x30DB, 0xA5DB),
		new t_ucs2gb_st(0x30DC, 0xA5DC),
		new t_ucs2gb_st(0x30DD, 0xA5DD),
		new t_ucs2gb_st(0x30DE, 0xA5DE),
		new t_ucs2gb_st(0x30DF, 0xA5DF),
		new t_ucs2gb_st(0x30E0, 0xA5E0),
		new t_ucs2gb_st(0x30E1, 0xA5E1),
		new t_ucs2gb_st(0x30E2, 0xA5E2),
		new t_ucs2gb_st(0x30E3, 0xA5E3),
		new t_ucs2gb_st(0x30E4, 0xA5E4),
		new t_ucs2gb_st(0x30E5, 0xA5E5),
		new t_ucs2gb_st(0x30E6, 0xA5E6),
		new t_ucs2gb_st(0x30E7, 0xA5E7),
		new t_ucs2gb_st(0x30E8, 0xA5E8),
		new t_ucs2gb_st(0x30E9, 0xA5E9),
		new t_ucs2gb_st(0x30EA, 0xA5EA),
		new t_ucs2gb_st(0x30EB, 0xA5EB),
		new t_ucs2gb_st(0x30EC, 0xA5EC),
		new t_ucs2gb_st(0x30ED, 0xA5ED),
		new t_ucs2gb_st(0x30EE, 0xA5EE),
		new t_ucs2gb_st(0x30EF, 0xA5EF),
		new t_ucs2gb_st(0x30F0, 0xA5F0),
		new t_ucs2gb_st(0x30F1, 0xA5F1),
		new t_ucs2gb_st(0x30F2, 0xA5F2),
		new t_ucs2gb_st(0x30F3, 0xA5F3),
		new t_ucs2gb_st(0x30F4, 0xA5F4),
		new t_ucs2gb_st(0x30F5, 0xA5F5),
		new t_ucs2gb_st(0x30F6, 0xA5F6),
		new t_ucs2gb_st(0x3105, 0xA8C5),
		new t_ucs2gb_st(0x3106, 0xA8C6),
		new t_ucs2gb_st(0x3107, 0xA8C7),
		new t_ucs2gb_st(0x3108, 0xA8C8),
		new t_ucs2gb_st(0x3109, 0xA8C9),
		new t_ucs2gb_st(0x310A, 0xA8CA),
		new t_ucs2gb_st(0x310B, 0xA8CB),
		new t_ucs2gb_st(0x310C, 0xA8CC),
		new t_ucs2gb_st(0x310D, 0xA8CD),
		new t_ucs2gb_st(0x310E, 0xA8CE),
		new t_ucs2gb_st(0x310F, 0xA8CF),
		new t_ucs2gb_st(0x3110, 0xA8D0),
		new t_ucs2gb_st(0x3111, 0xA8D1),
		new t_ucs2gb_st(0x3112, 0xA8D2),
		new t_ucs2gb_st(0x3113, 0xA8D3),
		new t_ucs2gb_st(0x3114, 0xA8D4),
		new t_ucs2gb_st(0x3115, 0xA8D5),
		new t_ucs2gb_st(0x3116, 0xA8D6),
		new t_ucs2gb_st(0x3117, 0xA8D7),
		new t_ucs2gb_st(0x3118, 0xA8D8),
		new t_ucs2gb_st(0x3119, 0xA8D9),
		new t_ucs2gb_st(0x311A, 0xA8DA),
		new t_ucs2gb_st(0x311B, 0xA8DB),
		new t_ucs2gb_st(0x311C, 0xA8DC),
		new t_ucs2gb_st(0x311D, 0xA8DD),
		new t_ucs2gb_st(0x311E, 0xA8DE),
		new t_ucs2gb_st(0x311F, 0xA8DF),
		new t_ucs2gb_st(0x3120, 0xA8E0),
		new t_ucs2gb_st(0x3121, 0xA8E1),
		new t_ucs2gb_st(0x3122, 0xA8E2),
		new t_ucs2gb_st(0x3123, 0xA8E3),
		new t_ucs2gb_st(0x3124, 0xA8E4),
		new t_ucs2gb_st(0x3125, 0xA8E5),
		new t_ucs2gb_st(0x3126, 0xA8E6),
		new t_ucs2gb_st(0x3127, 0xA8E7),
		new t_ucs2gb_st(0x3128, 0xA8E8),
		new t_ucs2gb_st(0x3129, 0xA8E9),
		new t_ucs2gb_st(0x3220, 0xA2E5),
		new t_ucs2gb_st(0x3221, 0xA2E6),
		new t_ucs2gb_st(0x3222, 0xA2E7),
		new t_ucs2gb_st(0x3223, 0xA2E8),
		new t_ucs2gb_st(0x3224, 0xA2E9),
		new t_ucs2gb_st(0x3225, 0xA2EA),
		new t_ucs2gb_st(0x3226, 0xA2EB),
		new t_ucs2gb_st(0x3227, 0xA2EC),
		new t_ucs2gb_st(0x3228, 0xA2ED),
		new t_ucs2gb_st(0x3229, 0xA2EE),
		new t_ucs2gb_st(0xE7C7, 0xA8BC),
		new t_ucs2gb_st(0xE7C8, 0xA8BF),
		new t_ucs2gb_st(0xFE31, 0xA6F2),
		new t_ucs2gb_st(0xFE33, 0xA6F4),
		new t_ucs2gb_st(0xFE34, 0xA6F5),
		new t_ucs2gb_st(0xFE35, 0xA6E0),
		new t_ucs2gb_st(0xFE36, 0xA6E1),
		new t_ucs2gb_st(0xFE37, 0xA6F0),
		new t_ucs2gb_st(0xFE38, 0xA6F1),
		new t_ucs2gb_st(0xFE39, 0xA6E2),
		new t_ucs2gb_st(0xFE3A, 0xA6E3),
		new t_ucs2gb_st(0xFE3B, 0xA6EE),
		new t_ucs2gb_st(0xFE3C, 0xA6EF),
		new t_ucs2gb_st(0xFE3D, 0xA6E6),
		new t_ucs2gb_st(0xFE3E, 0xA6E7),
		new t_ucs2gb_st(0xFE3F, 0xA6E4),
		new t_ucs2gb_st(0xFE40, 0xA6E5),
		new t_ucs2gb_st(0xFE41, 0xA6E8),
		new t_ucs2gb_st(0xFE42, 0xA6E9),
		new t_ucs2gb_st(0xFE43, 0xA6EA),
		new t_ucs2gb_st(0xFE44, 0xA6EB),
		new t_ucs2gb_st(0xFF01, 0xA3A1),
		new t_ucs2gb_st(0xFF02, 0xA3A2),
		new t_ucs2gb_st(0xFF03, 0xA3A3),
		new t_ucs2gb_st(0xFF04, 0xA1E7),
		new t_ucs2gb_st(0xFF05, 0xA3A5),
		new t_ucs2gb_st(0xFF06, 0xA3A6),
		new t_ucs2gb_st(0xFF07, 0xA3A7),
		new t_ucs2gb_st(0xFF08, 0xA3A8),
		new t_ucs2gb_st(0xFF09, 0xA3A9),
		new t_ucs2gb_st(0xFF0A, 0xA3AA),
		new t_ucs2gb_st(0xFF0B, 0xA3AB),
		new t_ucs2gb_st(0xFF0C, 0xA3AC),
		new t_ucs2gb_st(0xFF0D, 0xA3AD),
		new t_ucs2gb_st(0xFF0E, 0xA3AE),
		new t_ucs2gb_st(0xFF0F, 0xA3AF),
		new t_ucs2gb_st(0xFF10, 0xA3B0),
		new t_ucs2gb_st(0xFF11, 0xA3B1),
		new t_ucs2gb_st(0xFF12, 0xA3B2),
		new t_ucs2gb_st(0xFF13, 0xA3B3),
		new t_ucs2gb_st(0xFF14, 0xA3B4),
		new t_ucs2gb_st(0xFF15, 0xA3B5),
		new t_ucs2gb_st(0xFF16, 0xA3B6),
		new t_ucs2gb_st(0xFF17, 0xA3B7),
		new t_ucs2gb_st(0xFF18, 0xA3B8),
		new t_ucs2gb_st(0xFF19, 0xA3B9),
		new t_ucs2gb_st(0xFF1A, 0xA3BA),
		new t_ucs2gb_st(0xFF1B, 0xA3BB),
		new t_ucs2gb_st(0xFF1C, 0xA3BC),
		new t_ucs2gb_st(0xFF1D, 0xA3BD),
		new t_ucs2gb_st(0xFF1E, 0xA3BE),
		new t_ucs2gb_st(0xFF1F, 0xA3BF),
		new t_ucs2gb_st(0xFF20, 0xA3C0),
		new t_ucs2gb_st(0xFF21, 0xA3C1),
		new t_ucs2gb_st(0xFF22, 0xA3C2),
		new t_ucs2gb_st(0xFF23, 0xA3C3),
		new t_ucs2gb_st(0xFF24, 0xA3C4),
		new t_ucs2gb_st(0xFF25, 0xA3C5),
		new t_ucs2gb_st(0xFF26, 0xA3C6),
		new t_ucs2gb_st(0xFF27, 0xA3C7),
		new t_ucs2gb_st(0xFF28, 0xA3C8),
		new t_ucs2gb_st(0xFF29, 0xA3C9),
		new t_ucs2gb_st(0xFF2A, 0xA3CA),
		new t_ucs2gb_st(0xFF2B, 0xA3CB),
		new t_ucs2gb_st(0xFF2C, 0xA3CC),
		new t_ucs2gb_st(0xFF2D, 0xA3CD),
		new t_ucs2gb_st(0xFF2E, 0xA3CE),
		new t_ucs2gb_st(0xFF2F, 0xA3CF),
		new t_ucs2gb_st(0xFF30, 0xA3D0),
		new t_ucs2gb_st(0xFF31, 0xA3D1),
		new t_ucs2gb_st(0xFF32, 0xA3D2),
		new t_ucs2gb_st(0xFF33, 0xA3D3),
		new t_ucs2gb_st(0xFF34, 0xA3D4),
		new t_ucs2gb_st(0xFF35, 0xA3D5),
		new t_ucs2gb_st(0xFF36, 0xA3D6),
		new t_ucs2gb_st(0xFF37, 0xA3D7),
		new t_ucs2gb_st(0xFF38, 0xA3D8),
		new t_ucs2gb_st(0xFF39, 0xA3D9),
		new t_ucs2gb_st(0xFF3A, 0xA3DA),
		new t_ucs2gb_st(0xFF3B, 0xA3DB),
		new t_ucs2gb_st(0xFF3C, 0xA3DC),
		new t_ucs2gb_st(0xFF3D, 0xA3DD),
		new t_ucs2gb_st(0xFF3E, 0xA3DE),
		new t_ucs2gb_st(0xFF3F, 0xA3DF),
		new t_ucs2gb_st(0xFF40, 0xA3E0),
		new t_ucs2gb_st(0xFF41, 0xA3E1),
		new t_ucs2gb_st(0xFF42, 0xA3E2),
		new t_ucs2gb_st(0xFF43, 0xA3E3),
		new t_ucs2gb_st(0xFF44, 0xA3E4),
		new t_ucs2gb_st(0xFF45, 0xA3E5),
		new t_ucs2gb_st(0xFF46, 0xA3E6),
		new t_ucs2gb_st(0xFF47, 0xA3E7),
		new t_ucs2gb_st(0xFF48, 0xA3E8),
		new t_ucs2gb_st(0xFF49, 0xA3E9),
		new t_ucs2gb_st(0xFF4A, 0xA3EA),
		new t_ucs2gb_st(0xFF4B, 0xA3EB),
		new t_ucs2gb_st(0xFF4C, 0xA3EC),
		new t_ucs2gb_st(0xFF4D, 0xA3ED),
		new t_ucs2gb_st(0xFF4E, 0xA3EE),
		new t_ucs2gb_st(0xFF4F, 0xA3EF),
		new t_ucs2gb_st(0xFF50, 0xA3F0),
		new t_ucs2gb_st(0xFF51, 0xA3F1),
		new t_ucs2gb_st(0xFF52, 0xA3F2),
		new t_ucs2gb_st(0xFF53, 0xA3F3),
		new t_ucs2gb_st(0xFF54, 0xA3F4),
		new t_ucs2gb_st(0xFF55, 0xA3F5),
		new t_ucs2gb_st(0xFF56, 0xA3F6),
		new t_ucs2gb_st(0xFF57, 0xA3F7),
		new t_ucs2gb_st(0xFF58, 0xA3F8),
		new t_ucs2gb_st(0xFF59, 0xA3F9),
		new t_ucs2gb_st(0xFF5A, 0xA3FA),
		new t_ucs2gb_st(0xFF5B, 0xA3FB),
		new t_ucs2gb_st(0xFF5C, 0xA3FC),
		new t_ucs2gb_st(0xFF5D, 0xA3FD),
		new t_ucs2gb_st(0xFF5E, 0xA1AB),
		new t_ucs2gb_st(0xFFE0, 0xA1E9),
		new t_ucs2gb_st(0xFFE1, 0xA1EA),
		new t_ucs2gb_st(0xFFE3, 0xA3FE),
		new t_ucs2gb_st(0xFFE5, 0xA3A4)
	};
	// uni2gb线性码表
	public static ushort[] tab_ucs2gb = {0xD2BB, 0xB6A1, 0x8140, 0xC6DF, 0x8141, 0x8142, 0x8143,
        0xCDF2, 0xD5C9, 0xC8FD, 0xC9CF, 0xCFC2, 0xD8A2, 0xB2BB, 0xD3EB, 0x8144, 0xD8A4, 0xB3F3,
        0x8145, 0xD7A8, 0xC7D2, 0xD8A7, 0xCAC0, 0x8146, 0xC7F0, 0xB1FB, 0xD2B5, 0xB4D4, 0xB6AB, 0xCBBF, 0xD8A9, 0x8147, 0x8148, 0x8149, 0xB6AA, 0x814A, 0xC1BD, 0xD1CF, 0x814B, 0xC9A5, 0xD8AD, 0x814C, 0xB8F6, 0xD1BE, 0xE3DC, 0xD6D0, 0x814D, 0x814E, 0xB7E1, 0x814F, 0xB4AE, 0x8150, 0xC1D9, 0x8151, 0xD8BC, 0x8152, 0xCDE8, 0xB5A4, 0xCEAA, 0xD6F7, 0x8153, 0xC0F6, 0xBED9, 0xD8AF, 0x8154, 0x8155, 0x8156, 0xC4CB, 0x8157, 0xBEC3, 0x8158, 0xD8B1, 0xC3B4, 0xD2E5, 0x8159, 0xD6AE, 0xCEDA, 0xD5A7, 0xBAF5, 0xB7A6, 0xC0D6, 0x815A, 0xC6B9, 0xC5D2, 0xC7C7, 0x815B, 0xB9D4, 0x815C, 0xB3CB, 0xD2D2, 0x815D, 0x815E, 0xD8BF, 0xBEC5, 0xC6F2, 0xD2B2, 0xCFB0, 0xCFE7, 0x815F, 0x8160, 0x8161, 0x8162, 0xCAE9, 0x8163, 0x8164, 0xD8C0, 0x8165, 0x8166, 0x8167, 0x8168, 0x8169, 0x816A, 0xC2F2, 0xC2D2, 0x816B, 0xC8E9, 0x816C, 0x816D, 0x816E, 0x816F, 0x8170, 0x8171, 0x8172, 0x8173, 0x8174, 0x8175, 0xC7AC, 0x8176, 0x8177, 0x8178, 0x8179, 0x817A, 0x817B, 0x817C, 0xC1CB, 0x817D, 0xD3E8, 0xD5F9, 0x817E, 0xCAC2, 0xB6FE, 0xD8A1, 0xD3DA, 0xBFF7, 0x8180, 0xD4C6, 0xBBA5, 0xD8C1, 0xCEE5, 0xBEAE, 0x8181, 0x8182, 0xD8A8, 0x8183, 0xD1C7, 0xD0A9, 0x8184, 0x8185, 0x8186, 0xD8BD, 0xD9EF, 0xCDF6, 0xBFBA, 0x8187, 0xBDBB, 0xBAA5, 0xD2E0, 0xB2FA, 0xBAE0, 0xC4B6, 0x8188, 0xCFED, 0xBEA9, 0xCDA4, 0xC1C1, 0x8189, 0x818A, 0x818B, 0xC7D7, 0xD9F1, 0x818C, 0xD9F4, 0x818D, 0x818E, 0x818F, 0x8190, 0xC8CB, 0xD8E9, 0x8191, 0x8192, 0x8193, 0xD2DA, 0xCAB2, 0xC8CA, 0xD8EC, 0xD8EA, 0xD8C6, 0xBDF6, 0xC6CD, 0xB3F0, 0x8194, 0xD8EB, 0xBDF1, 0xBDE9, 0x8195, 0xC8D4, 0xB4D3, 0x8196, 0x8197, 0xC2D8, 0x8198, 0xB2D6, 0xD7D0, 0xCACB, 0xCBFB, 0xD5CC, 0xB8B6, 0xCFC9, 0x8199, 0x819A, 0x819B, 0xD9DA, 0xD8F0, 0xC7AA, 0x819C, 0xD8EE, 0x819D, 0xB4FA, 0xC1EE, 0xD2D4, 0x819E, 0x819F, 0xD8ED, 0x81A0, 0xD2C7, 0xD8EF, 0xC3C7, 0x81A1, 0x81A2, 0x81A3, 0xD1F6, 0x81A4, 0xD6D9, 0xD8F2, 0x81A5, 0xD8F5, 0xBCFE, 0xBCDB, 0x81A6, 0x81A7, 0x81A8, 0xC8CE, 0x81A9, 0xB7DD, 0x81AA, 0xB7C2, 0x81AB, 0xC6F3, 0x81AC, 0x81AD, 0x81AE, 0x81AF, 0x81B0, 0x81B1, 0x81B2, 0xD8F8, 0xD2C1, 0x81B3, 0x81B4, 0xCEE9, 0xBCBF, 0xB7FC, 0xB7A5, 0xD0DD, 0x81B5, 0x81B6, 0x81B7, 0x81B8, 0x81B9, 0xD6DA, 0xD3C5, 0xBBEF, 0xBBE1, 0xD8F1, 0x81BA, 0x81BB, 0xC9A1, 0xCEB0, 0xB4AB, 0x81BC, 0xD8F3, 0x81BD, 0xC9CB, 0xD8F6, 0xC2D7, 0xD8F7, 0x81BE, 0x81BF, 0xCEB1, 0xD8F9, 0x81C0, 0x81C1, 0x81C2, 0xB2AE, 0xB9C0, 0x81C3, 0xD9A3, 0x81C4, 0xB0E9, 0x81C5, 0xC1E6, 0x81C6, 0xC9EC, 0x81C7, 0xCBC5, 0x81C8, 0xCBC6, 0xD9A4, 0x81C9, 0x81CA, 0x81CB, 0x81CC, 0x81CD, 0xB5E8, 0x81CE, 0x81CF, 0xB5AB, 0x81D0, 0x81D1, 0x81D2, 0x81D3, 0x81D4, 0x81D5, 0xCEBB, 0xB5CD, 0xD7A1, 0xD7F4, 0xD3D3, 0x81D6, 0xCCE5, 0x81D7, 0xBACE, 0x81D8, 0xD9A2, 0xD9DC, 0xD3E0, 0xD8FD, 0xB7F0, 0xD7F7, 0xD8FE, 0xD8FA, 0xD9A1, 0xC4E3, 0x81D9, 0x81DA, 0xD3B6, 0xD8F4, 0xD9DD, 0x81DB, 0xD8FB, 0x81DC, 0xC5E5, 0x81DD, 0x81DE, 0xC0D0, 0x81DF, 0x81E0, 0xD1F0, 0xB0DB, 0x81E1, 0x81E2, 0xBCD1, 0xD9A6, 0x81E3, 0xD9A5, 0x81E4, 0x81E5, 0x81E6, 0x81E7, 0xD9AC, 0xD9AE, 0x81E8, 0xD9AB, 0xCAB9, 0x81E9, 0x81EA, 0x81EB, 0xD9A9, 0xD6B6, 0x81EC, 0x81ED, 0x81EE, 0xB3DE, 0xD9A8, 0x81EF, 0xC0FD, 0x81F0, 0xCACC, 0x81F1, 0xD9AA, 0x81F2, 0xD9A7, 0x81F3, 0x81F4, 0xD9B0, 0x81F5, 0x81F6, 0xB6B1, 0x81F7, 0x81F8, 0x81F9, 0xB9A9, 0x81FA, 0xD2C0, 0x81FB, 0x81FC, 0xCFC0, 0x81FD, 0x81FE, 0xC2C2, 0x8240, 0xBDC4, 0xD5EC, 0xB2E0, 0xC7C8, 0xBFEB, 0xD9AD, 0x8241, 0xD9AF, 0x8242, 0xCEEA, 0xBAEE, 0x8243, 0x8244, 0x8245, 0x8246, 0x8247, 0xC7D6, 0x8248, 0x8249, 0x824A, 0x824B, 0x824C, 0x824D, 0x824E, 0x824F, 0x8250, 0xB1E3, 0x8251, 0x8252, 0x8253, 0xB4D9, 0xB6ED, 0xD9B4, 0x8254, 0x8255, 0x8256, 0x8257, 0xBFA1, 0x8258, 0x8259, 0x825A, 0xD9DE, 0xC7CE, 0xC0FE, 0xD9B8, 0x825B, 0x825C, 0x825D, 0x825E, 0x825F, 0xCBD7, 0xB7FD, 0x8260, 0xD9B5, 0x8261, 0xD9B7, 0xB1A3, 0xD3E1, 0xD9B9, 0x8262, 0xD0C5, 0x8263, 0xD9B6, 0x8264, 0x8265, 0xD9B1, 0x8266, 0xD9B2, 0xC1A9, 0xD9B3, 0x8267, 0x8268, 0xBCF3, 0xD0DE, 0xB8A9, 0x8269, 0xBEE3, 0x826A, 0xD9BD, 0x826B, 0x826C, 0x826D, 0x826E, 0xD9BA, 0x826F, 0xB0B3, 0x8270, 0x8271, 0x8272, 0xD9C2, 0x8273, 0x8274, 0x8275, 0x8276, 0x8277, 0x8278, 0x8279, 0x827A, 0x827B, 0x827C, 0x827D, 0x827E, 0x8280, 0xD9C4, 0xB1B6, 0x8281, 0xD9BF, 0x8282, 0x8283, 0xB5B9, 0x8284, 0xBEF3, 0x8285, 0x8286, 0x8287, 0xCCC8, 0xBAF2, 0xD2D0, 0x8288, 0xD9C3, 0x8289, 0x828A, 0xBDE8, 0x828B, 0xB3AB, 0x828C, 0x828D, 0x828E, 0xD9C5, 0xBEEB, 0x828F, 0xD9C6, 0xD9BB, 0xC4DF, 0x8290, 0xD9BE, 0xD9C1, 0xD9C0, 0x8291, 0x8292, 0x8293, 0x8294, 0x8295, 0x8296, 0x8297, 0x8298, 0x8299, 0x829A, 0x829B, 0xD5AE, 0x829C, 0xD6B5, 0x829D, 0xC7E3, 0x829E, 0x829F, 0x82A0, 0x82A1, 0xD9C8, 0x82A2, 0x82A3, 0x82A4, 0xBCD9, 0xD9CA, 0x82A5, 0x82A6, 0x82A7, 0xD9BC, 0x82A8, 0xD9CB, 0xC6AB, 0x82A9, 0x82AA, 0x82AB, 0x82AC, 0x82AD, 0xD9C9, 0x82AE, 0x82AF, 0x82B0, 0x82B1, 0xD7F6, 0x82B2, 0xCDA3, 0x82B3, 0x82B4, 0x82B5, 0x82B6, 0x82B7, 0x82B8, 0x82B9, 0x82BA, 0xBDA1, 0x82BB, 0x82BC, 0x82BD, 0x82BE, 0x82BF, 0x82C0, 0xD9CC, 0x82C1, 0x82C2, 0x82C3, 0x82C4, 0x82C5, 0x82C6, 0x82C7, 0x82C8, 0x82C9, 0xC5BC, 0xCDB5, 0x82CA, 0x82CB, 0x82CC, 0xD9CD, 0x82CD, 0x82CE, 0xD9C7, 0xB3A5, 0xBFFE, 0x82CF, 0x82D0, 0x82D1, 0x82D2, 0xB8B5, 0x82D3, 0x82D4, 0xC0FC, 0x82D5, 0x82D6, 0x82D7, 0x82D8, 0xB0F8, 0x82D9, 0x82DA, 0x82DB, 0x82DC, 0x82DD, 0x82DE, 0x82DF, 0x82E0, 0x82E1, 0x82E2, 0x82E3, 0x82E4, 0x82E5, 0x82E6, 0x82E7, 0x82E8, 0x82E9, 0x82EA, 0x82EB, 0x82EC, 0x82ED, 0xB4F6, 0x82EE, 0xD9CE, 0x82EF, 0xD9CF, 0xB4A2, 0xD9D0, 0x82F0, 0x82F1, 0xB4DF, 0x82F2, 0x82F3, 0x82F4, 0x82F5, 0x82F6, 0xB0C1, 0x82F7, 0x82F8, 0x82F9, 0x82FA, 0x82FB, 0x82FC, 0x82FD, 0xD9D1, 0xC9B5, 0x82FE, 0x8340, 0x8341, 0x8342, 0x8343, 0x8344, 0x8345, 0x8346, 0x8347, 0x8348, 0x8349, 0x834A, 0x834B, 0x834C, 0x834D, 0x834E, 0x834F, 0x8350, 0x8351, 0xCFF1, 0x8352, 0x8353, 0x8354, 0x8355, 0x8356, 0x8357, 0xD9D2, 0x8358, 0x8359, 0x835A, 0xC1C5, 0x835B, 0x835C, 0x835D, 0x835E, 0x835F, 0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365, 0xD9D6, 0xC9AE, 0x8366, 0x8367, 0x8368, 0x8369, 0xD9D5, 0xD9D4, 0xD9D7, 0x836A, 0x836B, 0x836C, 0x836D, 0xCBDB, 0x836E, 0xBDA9, 0x836F, 0x8370, 0x8371, 0x8372, 0x8373, 0xC6A7, 0x8374, 0x8375, 0x8376, 0x8377, 0x8378, 0x8379, 0x837A, 0x837B, 0x837C, 0x837D, 0xD9D3, 0xD9D8, 0x837E, 0x8380, 0x8381, 0xD9D9, 0x8382, 0x8383, 0x8384, 0x8385, 0x8386, 0x8387, 0xC8E5, 0x8388, 0x8389, 0x838A, 0x838B, 0x838C, 0x838D, 0x838E, 0x838F, 0x8390, 0x8391, 0x8392, 0x8393, 0x8394, 0x8395, 0xC0DC, 0x8396, 0x8397, 0x8398, 0x8399, 0x839A, 0x839B, 0x839C, 0x839D, 0x839E, 0x839F, 0x83A0, 0x83A1, 0x83A2, 0x83A3, 0x83A4, 0x83A5, 0x83A6, 0x83A7, 0x83A8, 0x83A9, 0x83AA, 0x83AB, 0x83AC, 0x83AD, 0x83AE, 0x83AF, 0x83B0, 0x83B1, 0x83B2, 0xB6F9, 0xD8A3, 0xD4CA, 0x83B3, 0xD4AA, 0xD0D6, 0xB3E4, 0xD5D7, 0x83B4, 0xCFC8, 0xB9E2, 0x83B5, 0xBFCB, 0x83B6, 0xC3E2, 0x83B7, 0x83B8, 0x83B9, 0xB6D2, 0x83BA, 0x83BB, 0xCDC3, 0xD9EE, 0xD9F0, 0x83BC, 0x83BD, 0x83BE, 0xB5B3, 0x83BF, 0xB6B5, 0x83C0, 0x83C1, 0x83C2, 0x83C3, 0x83C4, 0xBEA4, 0x83C5, 0x83C6, 0xC8EB, 0x83C7, 0x83C8, 0xC8AB, 0x83C9, 0x83CA, 0xB0CB, 0xB9AB, 0xC1F9, 0xD9E2, 0x83CB, 0xC0BC, 0xB9B2, 0x83CC, 0xB9D8, 0xD0CB, 0xB1F8, 0xC6E4, 0xBEDF, 0xB5E4, 0xD7C8, 0x83CD, 0xD1F8, 0xBCE6, 0xCADE, 0x83CE, 0x83CF, 0xBCBD, 0xD9E6, 0xD8E7, 0x83D0, 0x83D1, 0xC4DA, 0x83D2, 0x83D3, 0xB8D4, 0xC8BD, 0x83D4, 0x83D5, 0xB2E1, 0xD4D9, 0x83D6, 0x83D7, 0x83D8, 0x83D9, 0xC3B0, 0x83DA, 0x83DB, 0xC3E1, 0xDAA2, 0xC8DF, 0x83DC, 0xD0B4, 0x83DD, 0xBEFC, 0xC5A9, 0x83DE, 0x83DF, 0x83E0, 0xB9DA, 0x83E1, 0xDAA3, 0x83E2, 0xD4A9, 0xDAA4, 0x83E3, 0x83E4, 0x83E5, 0x83E6, 0x83E7, 0xD9FB, 0xB6AC, 0x83E8, 0x83E9, 0xB7EB, 0xB1F9, 0xD9FC, 0xB3E5, 0xBEF6, 0x83EA, 0xBFF6, 0xD2B1, 0xC0E4, 0x83EB, 0x83EC, 0x83ED, 0xB6B3, 0xD9FE, 0xD9FD, 0x83EE, 0x83EF, 0xBEBB, 0x83F0, 0x83F1, 0x83F2, 0xC6E0, 0x83F3, 0xD7BC, 0xDAA1, 0x83F4, 0xC1B9, 0x83F5, 0xB5F2, 0xC1E8, 0x83F6, 0x83F7, 0xBCF5, 0x83F8, 0xB4D5, 0x83F9, 0x83FA, 0x83FB, 0x83FC, 0x83FD, 0x83FE, 0x8440, 0x8441, 0x8442, 0xC1DD, 0x8443, 0xC4FD, 0x8444, 0x8445, 0xBCB8, 0xB7B2, 0x8446, 0x8447, 0xB7EF, 0x8448, 0x8449, 0x844A, 0x844B, 0x844C, 0x844D, 0xD9EC, 0x844E, 0xC6BE, 0x844F, 0xBFAD, 0xBBCB, 0x8450, 0x8451, 0xB5CA, 0x8452, 0xDBC9, 0xD0D7, 0x8453, 0xCDB9, 0xB0BC, 0xB3F6, 0xBBF7, 0xDBCA, 0xBAAF, 0x8454, 0xD4E4, 0xB5B6, 0xB5F3, 0xD8D6, 0xC8D0, 0x8455, 0x8456, 0xB7D6, 0xC7D0, 0xD8D7, 0x8457, 0xBFAF, 0x8458, 0x8459, 0xDBBB, 0xD8D8, 0x845A, 0x845B, 0xD0CC, 0xBBAE, 0x845C, 0x845D, 0x845E, 0xEBBE, 0xC1D0, 0xC1F5, 0xD4F2, 0xB8D5, 0xB4B4, 0x845F, 0xB3F5, 0x8460, 0x8461, 0xC9BE, 0x8462, 0x8463, 0x8464, 0xC5D0, 0x8465, 0x8466, 0x8467, 0xC5D9, 0xC0FB, 0x8468, 0xB1F0, 0x8469, 0xD8D9, 0xB9CE, 0x846A, 0xB5BD, 0x846B, 0x846C, 0xD8DA, 0x846D, 0x846E, 0xD6C6, 0xCBA2, 0xC8AF, 0xC9B2, 0xB4CC, 0xBFCC, 0x846F, 0xB9F4, 0x8470, 0xD8DB, 0xD8DC, 0xB6E7, 0xBCC1, 0xCCEA, 0x8471, 0x8472, 0x8473, 0x8474, 0x8475, 0x8476, 0xCFF7, 0x8477, 0xD8DD, 0xC7B0, 0x8478, 0x8479, 0xB9D0, 0xBDA3, 0x847A, 0x847B, 0xCCDE, 0x847C, 0xC6CA, 0x847D, 0x847E, 0x8480, 0x8481, 0x8482, 0xD8E0, 0x8483, 0xD8DE, 0x8484, 0x8485, 0xD8DF, 0x8486, 0x8487, 0x8488, 0xB0FE, 0x8489, 0xBEE7, 0x848A, 0xCAA3, 0xBCF4, 0x848B, 0x848C, 0x848D, 0x848E, 0xB8B1, 0x848F, 0x8490, 0xB8EE, 0x8491, 0x8492, 0x8493, 0x8494, 0x8495, 0x8496, 0x8497, 0x8498, 0x8499, 0x849A, 0xD8E2, 0x849B, 0xBDCB, 0x849C, 0xD8E4, 0xD8E3, 0x849D, 0x849E, 0x849F, 0x84A0, 0x84A1, 0xC5FC, 0x84A2, 0x84A3, 0x84A4, 0x84A5, 0x84A6, 0x84A7, 0x84A8, 0xD8E5, 0x84A9, 0x84AA, 0xD8E6, 0x84AB, 0x84AC, 0x84AD, 0x84AE, 0x84AF, 0x84B0, 0x84B1, 0xC1A6, 0x84B2, 0xC8B0, 0xB0EC, 0xB9A6, 0xBCD3, 0xCEF1, 0xDBBD, 0xC1D3, 0x84B3, 0x84B4, 0x84B5, 0x84B6, 0xB6AF, 0xD6FA, 0xC5AC, 0xBDD9, 0xDBBE, 0xDBBF, 0x84B7, 0x84B8, 0x84B9, 0xC0F8, 0xBEA2, 0xC0CD, 0x84BA, 0x84BB, 0x84BC, 0x84BD, 0x84BE, 0x84BF, 0x84C0, 0x84C1, 0x84C2, 0x84C3, 0xDBC0, 0xCAC6, 0x84C4, 0x84C5, 0x84C6, 0xB2AA, 0x84C7, 0x84C8, 0x84C9, 0xD3C2, 0x84CA, 0xC3E3, 0x84CB, 0xD1AB, 0x84CC, 0x84CD, 0x84CE, 0x84CF, 0xDBC2, 0x84D0, 0xC0D5, 0x84D1, 0x84D2, 0x84D3, 0xDBC3, 0x84D4, 0xBFB1, 0x84D5, 0x84D6, 0x84D7, 0x84D8, 0x84D9, 0x84DA, 0xC4BC, 0x84DB, 0x84DC, 0x84DD, 0x84DE, 0xC7DA, 0x84DF, 0x84E0, 0x84E1, 0x84E2, 0x84E3, 0x84E4, 0x84E5, 0x84E6, 0x84E7, 0x84E8, 0x84E9, 0xDBC4, 0x84EA, 0x84EB, 0x84EC, 0x84ED, 0x84EE, 0x84EF, 0x84F0, 0x84F1, 0xD9E8, 0xC9D7, 0x84F2, 0x84F3, 0x84F4, 0xB9B4, 0xCEF0, 0xD4C8, 0x84F5, 0x84F6, 0x84F7, 0x84F8, 0xB0FC, 0xB4D2, 0x84F9, 0xD0D9, 0x84FA, 0x84FB, 0x84FC, 0x84FD, 0xD9E9, 0x84FE, 0xDECB, 0xD9EB, 0x8540, 0x8541, 0x8542, 0x8543, 0xD8B0, 0xBBAF, 0xB1B1, 0x8544, 0xB3D7, 0xD8CE, 0x8545, 0x8546, 0xD4D1, 0x8547, 0x8548, 0xBDB3, 0xBFEF, 0x8549, 0xCFBB, 0x854A, 0x854B, 0xD8D0, 0x854C, 0x854D, 0x854E, 0xB7CB, 0x854F, 0x8550, 0x8551, 0xD8D1, 0x8552, 0x8553, 0x8554, 0x8555, 0x8556, 0x8557, 0x8558, 0x8559, 0x855A, 0x855B, 0xC6A5, 0xC7F8, 0xD2BD, 0x855C, 0x855D, 0xD8D2, 0xC4E4, 0x855E, 0xCAAE, 0x855F, 0xC7A7, 0x8560, 0xD8A6, 0x8561, 0xC9FD, 0xCEE7, 0xBBDC, 0xB0EB, 0x8562, 0x8563, 0x8564, 0xBBAA, 0xD0AD, 0x8565, 0xB1B0, 0xD7E4, 0xD7BF, 0x8566, 0xB5A5, 0xC2F4, 0xC4CF, 0x8567, 0x8568, 0xB2A9, 0x8569, 0xB2B7, 0x856A, 0xB1E5, 0xDFB2, 0xD5BC, 0xBFA8, 0xC2AC, 0xD8D5, 0xC2B1, 0x856B, 0xD8D4, 0xCED4, 0x856C, 0xDAE0, 0x856D, 0xCEC0, 0x856E, 0x856F, 0xD8B4, 0xC3AE, 0xD3A1, 0xCEA3, 0x8570, 0xBCB4, 0xC8B4, 0xC2D1, 0x8571, 0xBEED, 0xD0B6, 0x8572, 0xDAE1, 0x8573, 0x8574, 0x8575, 0x8576, 0xC7E4, 0x8577, 0x8578, 0xB3A7, 0x8579, 0xB6F2, 0xCCFC, 0xC0FA, 0x857A, 0x857B, 0xC0F7, 0x857C, 0xD1B9, 0xD1E1, 0xD8C7, 0x857D, 0x857E, 0x8580, 0x8581, 0x8582, 0x8583, 0x8584, 0xB2DE, 0x8585, 0x8586, 0xC0E5, 0x8587, 0xBAF1, 0x8588, 0x8589, 0xD8C8, 0x858A, 0xD4AD, 0x858B, 0x858C, 0xCFE1, 0xD8C9, 0x858D, 0xD8CA, 0xCFC3, 0x858E, 0xB3F8, 0xBEC7, 0x858F, 0x8590, 0x8591, 0x8592, 0xD8CB, 0x8593, 0x8594, 0x8595, 0x8596, 0x8597, 0x8598, 0x8599, 0xDBCC, 0x859A, 0x859B, 0x859C, 0x859D, 0xC8A5, 0x859E, 0x859F, 0x85A0, 0xCFD8, 0x85A1, 0xC8FE, 0xB2CE, 0x85A2, 0x85A3, 0x85A4, 0x85A5, 0x85A6, 0xD3D6, 0xB2E6, 0xBCB0, 0xD3D1, 0xCBAB, 0xB7B4, 0x85A7, 0x85A8, 0x85A9, 0xB7A2, 0x85AA, 0x85AB, 0xCAE5, 0x85AC, 0xC8A1, 0xCADC, 0xB1E4, 0xD0F0, 0x85AD, 0xC5D1, 0x85AE, 0x85AF, 0x85B0, 0xDBC5, 0xB5FE, 0x85B1, 0x85B2, 0xBFDA, 0xB9C5, 0xBEE4, 0xC1ED, 0x85B3, 0xDFB6, 0xDFB5, 0xD6BB, 0xBDD0, 0xD5D9, 0xB0C8, 0xB6A3, 0xBFC9, 0xCCA8, 0xDFB3, 0xCAB7, 0xD3D2, 0x85B4, 0xD8CF, 0xD2B6, 0xBAC5, 0xCBBE, 0xCCBE, 0x85B5, 0xDFB7, 0xB5F0, 0xDFB4, 0x85B6, 0x85B7, 0x85B8, 0xD3F5, 0x85B9, 0xB3D4, 0xB8F7, 0x85BA, 0xDFBA, 0x85BB, 0xBACF, 0xBCAA, 0xB5F5, 0x85BC, 0xCDAC, 0xC3FB, 0xBAF3, 0xC0F4, 0xCDC2, 0xCFF2, 0xDFB8, 0xCFC5, 0x85BD, 0xC2C0, 0xDFB9, 0xC2F0, 0x85BE, 0x85BF, 0x85C0, 0xBEFD, 0x85C1, 0xC1DF, 0xCDCC, 0xD2F7, 0xB7CD, 0xDFC1, 0x85C2, 0xDFC4, 0x85C3, 0x85C4, 0xB7F1, 0xB0C9, 0xB6D6, 0xB7D4, 0x85C5, 0xBAAC, 0xCCFD, 0xBFD4, 0xCBB1, 0xC6F4, 0x85C6, 0xD6A8, 0xDFC5, 0x85C7, 0xCEE2, 0xB3B3, 0x85C8, 0x85C9, 0xCEFC, 0xB4B5, 0x85CA, 0xCEC7, 0xBAF0, 0x85CB, 0xCEE1, 0x85CC, 0xD1BD, 0x85CD, 0x85CE, 0xDFC0, 0x85CF, 0x85D0, 0xB4F4, 0x85D1, 0xB3CA, 0x85D2, 0xB8E6, 0xDFBB, 0x85D3, 0x85D4, 0x85D5, 0x85D6, 0xC4C5, 0x85D7, 0xDFBC, 0xDFBD, 0xDFBE, 0xC5BB, 0xDFBF, 0xDFC2, 0xD4B1, 0xDFC3, 0x85D8, 0xC7BA, 0xCED8, 0x85D9, 0x85DA, 0x85DB, 0x85DC, 0x85DD, 0xC4D8, 0x85DE, 0xDFCA, 0x85DF, 0xDFCF, 0x85E0, 0xD6DC, 0x85E1, 0x85E2, 0x85E3, 0x85E4, 0x85E5, 0x85E6, 0x85E7, 0x85E8, 0xDFC9, 0xDFDA, 0xCEB6, 0x85E9, 0xBAC7, 0xDFCE, 0xDFC8, 0xC5DE, 0x85EA, 0x85EB, 0xC9EB, 0xBAF4, 0xC3FC, 0x85EC, 0x85ED, 0xBED7, 0x85EE, 0xDFC6, 0x85EF, 0xDFCD, 0x85F0, 0xC5D8, 0x85F1, 0x85F2, 0x85F3, 0x85F4, 0xD5A6, 0xBACD, 0x85F5, 0xBECC, 0xD3BD, 0xB8C0, 0x85F6, 0xD6E4, 0x85F7, 0xDFC7, 0xB9BE, 0xBFA7, 0x85F8, 0x85F9, 0xC1FC, 0xDFCB, 0xDFCC, 0x85FA, 0xDFD0, 0x85FB, 0x85FC, 0x85FD, 0x85FE, 0x8640, 0xDFDB, 0xDFE5, 0x8641, 0xDFD7, 0xDFD6, 0xD7C9, 0xDFE3, 0xDFE4, 0xE5EB, 0xD2A7, 0xDFD2, 0x8642, 0xBFA9, 0x8643, 0xD4DB, 0x8644, 0xBFC8, 0xDFD4, 0x8645, 0x8646, 0x8647, 0xCFCC, 0x8648, 0x8649, 0xDFDD, 0x864A, 0xD1CA, 0x864B, 0xDFDE, 0xB0A7, 0xC6B7, 0xDFD3, 0x864C, 0xBAE5, 0x864D, 0xB6DF, 0xCDDB, 0xB9FE, 0xD4D5, 0x864E, 0x864F, 0xDFDF, 0xCFEC, 0xB0A5, 0xDFE7, 0xDFD1, 0xD1C6, 0xDFD5, 0xDFD8, 0xDFD9, 0xDFDC, 0x8650, 0xBBA9, 0x8651, 0xDFE0, 0xDFE1, 0x8652, 0xDFE2, 0xDFE6, 0xDFE8, 0xD3B4, 0x8653, 0x8654, 0x8655, 0x8656, 0x8657, 0xB8E7, 0xC5B6, 0xDFEA, 0xC9DA, 0xC1A8, 0xC4C4, 0x8658, 0x8659, 0xBFDE, 0xCFF8, 0x865A, 0x865B, 0x865C, 0xD5DC, 0xDFEE, 0x865D, 0x865E, 0x865F, 0x8660, 0x8661, 0x8662, 0xB2B8, 0x8663, 0xBADF, 0xDFEC, 0x8664, 0xDBC1, 0x8665, 0xD1E4, 0x8666, 0x8667, 0x8668, 0x8669, 0xCBF4, 0xB4BD, 0x866A, 0xB0A6, 0x866B, 0x866C, 0x866D, 0x866E, 0x866F, 0xDFF1, 0xCCC6, 0xDFF2, 0x8670, 0x8671, 0xDFED, 0x8672, 0x8673, 0x8674, 0x8675, 0x8676, 0x8677, 0xDFE9, 0x8678, 0x8679, 0x867A, 0x867B, 0xDFEB, 0x867C, 0xDFEF, 0xDFF0, 0xBBBD, 0x867D, 0x867E, 0xDFF3, 0x8680, 0x8681, 0xDFF4, 0x8682, 0xBBA3, 0x8683, 0xCADB, 0xCEA8, 0xE0A7, 0xB3AA, 0x8684, 0xE0A6, 0x8685, 0x8686, 0x8687, 0xE0A1, 0x8688, 0x8689, 0x868A, 0x868B, 0xDFFE, 0x868C, 0xCDD9, 0xDFFC, 0x868D, 0xDFFA, 0x868E, 0xBFD0, 0xD7C4, 0x868F, 0xC9CC, 0x8690, 0x8691, 0xDFF8, 0xB0A1, 0x8692, 0x8693, 0x8694, 0x8695, 0x8696, 0xDFFD, 0x8697, 0x8698, 0x8699, 0x869A, 0xDFFB, 0xE0A2, 0x869B, 0x869C, 0x869D, 0x869E, 0x869F, 0xE0A8, 0x86A0, 0x86A1, 0x86A2, 0x86A3, 0xB7C8, 0x86A4, 0x86A5, 0xC6A1, 0xC9B6, 0xC0B2, 0xDFF5, 0x86A6, 0x86A7, 0xC5BE, 0x86A8, 0xD8C4, 0xDFF9, 0xC4F6, 0x86A9, 0x86AA, 0x86AB, 0x86AC, 0x86AD, 0x86AE, 0xE0A3, 0xE0A4, 0xE0A5, 0xD0A5, 0x86AF, 0x86B0, 0xE0B4, 0xCCE4, 0x86B1, 0xE0B1, 0x86B2, 0xBFA6, 0xE0AF, 0xCEB9, 0xE0AB, 0xC9C6, 0x86B3, 0x86B4, 0xC0AE, 0xE0AE, 0xBAED, 0xBAB0, 0xE0A9, 0x86B5, 0x86B6, 0x86B7, 0xDFF6, 0x86B8, 0xE0B3, 0x86B9, 0x86BA, 0xE0B8, 0x86BB, 0x86BC, 0x86BD, 0xB4AD, 0xE0B9, 0x86BE, 0x86BF, 0xCFB2, 0xBAC8, 0x86C0, 0xE0B0, 0x86C1, 0x86C2, 0x86C3, 0x86C4, 0x86C5, 0x86C6, 0x86C7, 0xD0FA, 0x86C8, 0x86C9, 0x86CA, 0x86CB, 0x86CC, 0x86CD, 0x86CE, 0x86CF, 0x86D0, 0xE0AC, 0x86D1, 0xD4FB, 0x86D2, 0xDFF7, 0x86D3, 0xC5E7, 0x86D4, 0xE0AD, 0x86D5, 0xD3F7, 0x86D6, 0xE0B6, 0xE0B7, 0x86D7, 0x86D8, 0x86D9, 0x86DA, 0x86DB, 0xE0C4, 0xD0E1, 0x86DC, 0x86DD, 0x86DE, 0xE0BC, 0x86DF, 0x86E0, 0xE0C9, 0xE0CA, 0x86E1, 0x86E2, 0x86E3, 0xE0BE, 0xE0AA, 0xC9A4, 0xE0C1, 0x86E4, 0xE0B2, 0x86E5, 0x86E6, 0x86E7, 0x86E8, 0x86E9, 0xCAC8, 0xE0C3, 0x86EA, 0xE0B5, 0x86EB, 0xCECB, 0x86EC, 0xCBC3, 0xE0CD, 0xE0C6, 0xE0C2, 0x86ED, 0xE0CB, 0x86EE, 0xE0BA, 0xE0BF, 0xE0C0, 0x86EF, 0x86F0, 0xE0C5, 0x86F1, 0x86F2, 0xE0C7, 0xE0C8, 0x86F3, 0xE0CC, 0x86F4, 0xE0BB, 0x86F5, 0x86F6, 0x86F7, 0x86F8, 0x86F9, 0xCBD4, 0xE0D5, 0x86FA, 0xE0D6, 0xE0D2, 0x86FB, 0x86FC, 0x86FD, 0x86FE, 0x8740, 0x8741, 0xE0D0, 0xBCCE, 0x8742, 0x8743, 0xE0D1, 0x8744, 0xB8C2, 0xD8C5, 0x8745, 0x8746, 0x8747, 0x8748, 0x8749, 0x874A, 0x874B, 0x874C, 0xD0EA, 0x874D, 0x874E, 0xC2EF, 0x874F, 0x8750, 0xE0CF, 0xE0BD, 0x8751, 0x8752, 0x8753, 0xE0D4, 0xE0D3, 0x8754, 0x8755, 0xE0D7, 0x8756, 0x8757, 0x8758, 0x8759, 0xE0DC, 0xE0D8, 0x875A, 0x875B, 0x875C, 0xD6F6, 0xB3B0, 0x875D, 0xD7EC, 0x875E, 0xCBBB, 0x875F, 0x8760, 0xE0DA, 0x8761, 0xCEFB, 0x8762, 0x8763, 0x8764, 0xBAD9, 0x8765, 0x8766, 0x8767, 0x8768, 0x8769, 0x876A, 0x876B, 0x876C, 0x876D, 0x876E, 0x876F, 0x8770, 0xE0E1, 0xE0DD, 0xD2AD, 0x8771, 0x8772, 0x8773, 0x8774, 0x8775, 0xE0E2, 0x8776, 0x8777, 0xE0DB, 0xE0D9, 0xE0DF, 0x8778, 0x8779, 0xE0E0, 0x877A, 0x877B, 0x877C, 0x877D, 0x877E, 0xE0DE, 0x8780, 0xE0E4, 0x8781, 0x8782, 0x8783, 0xC6F7, 0xD8AC, 0xD4EB, 0xE0E6, 0xCAC9, 0x8784, 0x8785, 0x8786, 0x8787, 0xE0E5, 0x8788, 0x8789, 0x878A, 0x878B, 0xB8C1, 0x878C, 0x878D, 0x878E, 0x878F, 0xE0E7, 0xE0E8, 0x8790, 0x8791, 0x8792, 0x8793, 0x8794, 0x8795, 0x8796, 0x8797, 0xE0E9, 0xE0E3, 0x8798, 0x8799, 0x879A, 0x879B, 0x879C, 0x879D, 0x879E, 0xBABF, 0xCCE7, 0x879F, 0x87A0, 0x87A1, 0xE0EA, 0x87A2, 0x87A3, 0x87A4, 0x87A5, 0x87A6, 0x87A7, 0x87A8, 0x87A9, 0x87AA, 0x87AB, 0x87AC, 0x87AD, 0x87AE, 0x87AF, 0x87B0, 0xCFF9, 0x87B1, 0x87B2, 0x87B3, 0x87B4, 0x87B5, 0x87B6, 0x87B7, 0x87B8, 0x87B9, 0x87BA, 0x87BB, 0xE0EB, 0x87BC, 0x87BD, 0x87BE, 0x87BF, 0x87C0, 0x87C1, 0x87C2, 0xC8C2, 0x87C3, 0x87C4, 0x87C5, 0x87C6, 0xBDC0, 0x87C7, 0x87C8, 0x87C9, 0x87CA, 0x87CB, 0x87CC, 0x87CD, 0x87CE, 0x87CF, 0x87D0, 0x87D1, 0x87D2, 0x87D3, 0xC4D2, 0x87D4, 0x87D5, 0x87D6, 0x87D7, 0x87D8, 0x87D9, 0x87DA, 0x87DB, 0x87DC, 0xE0EC, 0x87DD, 0x87DE, 0xE0ED, 0x87DF, 0x87E0, 0xC7F4, 0xCBC4, 0x87E1, 0xE0EE, 0xBBD8, 0xD8B6, 0xD2F2, 0xE0EF, 0xCDC5, 0x87E2, 0xB6DA, 0x87E3, 0x87E4, 0x87E5, 0x87E6, 0x87E7, 0x87E8, 0xE0F1, 0x87E9, 0xD4B0, 0x87EA, 0x87EB, 0xC0A7, 0xB4D1, 0x87EC, 0x87ED, 0xCEA7, 0xE0F0, 0x87EE, 0x87EF, 0x87F0, 0xE0F2, 0xB9CC, 0x87F1, 0x87F2, 0xB9FA, 0xCDBC, 0xE0F3, 0x87F3, 0x87F4, 0x87F5, 0xC6D4, 0xE0F4, 0x87F6, 0xD4B2, 0x87F7, 0xC8A6, 0xE0F6, 0xE0F5, 0x87F8, 0x87F9, 0x87FA, 0x87FB, 0x87FC, 0x87FD, 0x87FE, 0x8840, 0x8841, 0x8842, 0x8843, 0x8844, 0x8845, 0x8846, 0x8847, 0x8848, 0x8849, 0xE0F7, 0x884A, 0x884B, 0xCDC1, 0x884C, 0x884D, 0x884E, 0xCAA5, 0x884F, 0x8850, 0x8851, 0x8852, 0xD4DA, 0xDBD7, 0xDBD9, 0x8853, 0xDBD8, 0xB9E7, 0xDBDC, 0xDBDD, 0xB5D8, 0x8854, 0x8855, 0xDBDA, 0x8856, 0x8857, 0x8858, 0x8859, 0x885A, 0xDBDB, 0xB3A1, 0xDBDF, 0x885B, 0x885C, 0xBBF8, 0x885D, 0xD6B7, 0x885E, 0xDBE0, 0x885F, 0x8860, 0x8861, 0x8862, 0xBEF9, 0x8863, 0x8864, 0xB7BB, 0x8865, 0xDBD0, 0xCCAE, 0xBFB2, 0xBBB5, 0xD7F8, 0xBFD3, 0x8866, 0x8867, 0x8868, 0x8869, 0x886A, 0xBFE9, 0x886B, 0x886C, 0xBCE1, 0xCCB3, 0xDBDE, 0xB0D3, 0xCEEB, 0xB7D8, 0xD7B9, 0xC6C2, 0x886D, 0x886E, 0xC0A4, 0x886F, 0xCCB9, 0x8870, 0xDBE7, 0xDBE1, 0xC6BA, 0xDBE3, 0x8871, 0xDBE8, 0x8872, 0xC5F7, 0x8873, 0x8874, 0x8875, 0xDBEA, 0x8876, 0x8877, 0xDBE9, 0xBFC0, 0x8878, 0x8879, 0x887A, 0xDBE6, 0xDBE5, 0x887B, 0x887C, 0x887D, 0x887E, 0x8880, 0xB4B9, 0xC0AC, 0xC2A2, 0xDBE2, 0xDBE4, 0x8881, 0x8882, 0x8883, 0x8884, 0xD0CD, 0xDBED, 0x8885, 0x8886, 0x8887, 0x8888, 0x8889, 0xC0DD, 0xDBF2, 0x888A, 0x888B, 0x888C, 0x888D, 0x888E, 0x888F, 0x8890, 0xB6E2, 0x8891, 0x8892, 0x8893, 0x8894, 0xDBF3, 0xDBD2, 0xB9B8, 0xD4AB, 0xDBEC, 0x8895, 0xBFD1, 0xDBF0, 0x8896, 0xDBD1, 0x8897, 0xB5E6, 0x8898, 0xDBEB, 0xBFE5, 0x8899, 0x889A, 0x889B, 0xDBEE, 0x889C, 0xDBF1, 0x889D, 0x889E, 0x889F, 0xDBF9, 0x88A0, 0x88A1, 0x88A2, 0x88A3, 0x88A4, 0x88A5, 0x88A6, 0x88A7, 0x88A8, 0xB9A1, 0xB0A3, 0x88A9, 0x88AA, 0x88AB, 0x88AC, 0x88AD, 0x88AE, 0x88AF, 0xC2F1, 0x88B0, 0x88B1, 0xB3C7, 0xDBEF, 0x88B2, 0x88B3, 0xDBF8, 0x88B4, 0xC6D2, 0xDBF4, 0x88B5, 0x88B6, 0xDBF5, 0xDBF7, 0xDBF6, 0x88B7, 0x88B8, 0xDBFE, 0x88B9, 0xD3F2, 0xB2BA, 0x88BA, 0x88BB, 0x88BC, 0xDBFD, 0x88BD, 0x88BE, 0x88BF, 0x88C0, 0x88C1, 0x88C2, 0x88C3, 0x88C4, 0xDCA4, 0x88C5, 0xDBFB, 0x88C6, 0x88C7, 0x88C8, 0x88C9, 0xDBFA, 0x88CA, 0x88CB, 0x88CC, 0xDBFC, 0xC5E0, 0xBBF9, 0x88CD, 0x88CE, 0xDCA3, 0x88CF, 0x88D0, 0xDCA5, 0x88D1, 0xCCC3, 0x88D2, 0x88D3, 0x88D4, 0xB6D1, 0xDDC0, 0x88D5, 0x88D6, 0x88D7, 0xDCA1, 0x88D8, 0xDCA2, 0x88D9, 0x88DA, 0x88DB, 0xC7B5, 0x88DC, 0x88DD, 0x88DE, 0xB6E9, 0x88DF, 0x88E0, 0x88E1, 0xDCA7, 0x88E2, 0x88E3, 0x88E4, 0x88E5, 0xDCA6, 0x88E6, 0xDCA9, 0xB1A4, 0x88E7, 0x88E8, 0xB5CC, 0x88E9, 0x88EA, 0x88EB, 0x88EC, 0x88ED, 0xBFB0, 0x88EE, 0x88EF, 0x88F0, 0x88F1, 0x88F2, 0xD1DF, 0x88F3, 0x88F4, 0x88F5, 0x88F6, 0xB6C2, 0x88F7, 0x88F8, 0x88F9, 0x88FA, 0x88FB, 0x88FC, 0x88FD, 0x88FE, 0x8940, 0x8941, 0x8942, 0x8943, 0x8944, 0x8945, 0xDCA8, 0x8946, 0x8947, 0x8948, 0x8949, 0x894A, 0x894B, 0x894C, 0xCBFA, 0xEBF3, 0x894D, 0x894E, 0x894F, 0xCBDC, 0x8950, 0x8951, 0xCBFE, 0x8952, 0x8953, 0x8954, 0xCCC1, 0x8955, 0x8956, 0x8957, 0x8958, 0x8959, 0xC8FB, 0x895A, 0x895B, 0x895C, 0x895D, 0x895E, 0x895F, 0xDCAA, 0x8960, 0x8961, 0x8962, 0x8963, 0x8964, 0xCCEE, 0xDCAB, 0x8965, 0x8966, 0x8967, 0x8968, 0x8969, 0x896A, 0x896B, 0x896C, 0x896D, 0x896E, 0x896F, 0x8970, 0x8971, 0x8972, 0x8973, 0x8974, 0x8975, 0xDBD3, 0x8976, 0xDCAF, 0xDCAC, 0x8977, 0xBEB3, 0x8978, 0xCAFB, 0x8979, 0x897A, 0x897B, 0xDCAD, 0x897C, 0x897D, 0x897E, 0x8980, 0x8981, 0x8982, 0x8983, 0x8984, 0xC9CA, 0xC4B9, 0x8985, 0x8986, 0x8987, 0x8988, 0x8989, 0xC7BD, 0xDCAE, 0x898A, 0x898B, 0x898C, 0xD4F6, 0xD0E6, 0x898D, 0x898E, 0x898F, 0x8990, 0x8991, 0x8992, 0x8993, 0x8994, 0xC4AB, 0xB6D5, 0x8995, 0x8996, 0x8997, 0x8998, 0x8999, 0x899A, 0x899B, 0x899C, 0x899D, 0x899E, 0x899F, 0x89A0, 0x89A1, 0x89A2, 0x89A3, 0x89A4, 0x89A5, 0x89A6, 0xDBD4, 0x89A7, 0x89A8, 0x89A9, 0x89AA, 0xB1DA, 0x89AB, 0x89AC, 0x89AD, 0xDBD5, 0x89AE, 0x89AF, 0x89B0, 0x89B1, 0x89B2, 0x89B3, 0x89B4, 0x89B5, 0x89B6, 0x89B7, 0x89B8, 0xDBD6, 0x89B9, 0x89BA, 0x89BB, 0xBABE, 0x89BC, 0x89BD, 0x89BE, 0x89BF, 0x89C0, 0x89C1, 0x89C2, 0x89C3, 0x89C4, 0x89C5, 0x89C6, 0x89C7, 0x89C8, 0x89C9, 0xC8C0, 0x89CA, 0x89CB, 0x89CC, 0x89CD, 0x89CE, 0x89CF, 0xCABF, 0xC8C9, 0x89D0, 0xD7B3, 0x89D1, 0xC9F9, 0x89D2, 0x89D3, 0xBFC7, 0x89D4, 0x89D5, 0xBAF8, 0x89D6, 0x89D7, 0xD2BC, 0x89D8, 0x89D9, 0x89DA, 0x89DB, 0x89DC, 0x89DD, 0x89DE, 0x89DF, 0xE2BA, 0x89E0, 0xB4A6, 0x89E1, 0x89E2, 0xB1B8, 0x89E3, 0x89E4, 0x89E5, 0x89E6, 0x89E7, 0xB8B4, 0x89E8, 0xCFC4, 0x89E9, 0x89EA, 0x89EB, 0x89EC, 0xD9E7, 0xCFA6, 0xCDE2, 0x89ED, 0x89EE, 0xD9ED, 0xB6E0, 0x89EF, 0xD2B9, 0x89F0, 0x89F1, 0xB9BB, 0x89F2, 0x89F3, 0x89F4, 0x89F5, 0xE2B9, 0xE2B7, 0x89F6, 0xB4F3, 0x89F7, 0xCCEC, 0xCCAB, 0xB7F2, 0x89F8, 0xD8B2, 0xD1EB, 0xBABB, 0x89F9, 0xCAA7, 0x89FA, 0x89FB, 0xCDB7, 0x89FC, 0x89FD, 0xD2C4, 0xBFE4, 0xBCD0, 0xB6E1, 0x89FE, 0xDEC5, 0x8A40, 0x8A41, 0x8A42, 0x8A43, 0xDEC6, 0xDBBC, 0x8A44, 0xD1D9, 0x8A45, 0x8A46, 0xC6E6, 0xC4CE, 0xB7EE, 0x8A47, 0xB7DC, 0x8A48, 0x8A49, 0xBFFC, 0xD7E0, 0x8A4A, 0xC6F5, 0x8A4B, 0x8A4C, 0xB1BC, 0xDEC8, 0xBDB1, 0xCCD7, 0xDECA, 0x8A4D, 0xDEC9, 0x8A4E, 0x8A4F, 0x8A50, 0x8A51, 0x8A52, 0xB5EC, 0x8A53, 0xC9DD, 0x8A54, 0x8A55, 0xB0C2, 0x8A56, 0x8A57, 0x8A58, 0x8A59, 0x8A5A, 0x8A5B, 0x8A5C, 0x8A5D, 0x8A5E, 0x8A5F, 0x8A60, 0x8A61, 0x8A62, 0xC5AE, 0xC5AB, 0x8A63, 0xC4CC, 0x8A64, 0xBCE9, 0xCBFD, 0x8A65, 0x8A66, 0x8A67, 0xBAC3, 0x8A68, 0x8A69, 0x8A6A, 0xE5F9, 0xC8E7, 0xE5FA, 0xCDFD, 0x8A6B, 0xD7B1, 0xB8BE, 0xC2E8, 0x8A6C, 0xC8D1, 0x8A6D, 0x8A6E, 0xE5FB, 0x8A6F, 0x8A70, 0x8A71, 0x8A72, 0xB6CA, 0xBCCB, 0x8A73, 0x8A74, 0xD1FD, 0xE6A1, 0x8A75, 0xC3EE, 0x8A76, 0x8A77, 0x8A78, 0x8A79, 0xE6A4, 0x8A7A, 0x8A7B, 0x8A7C, 0x8A7D, 0xE5FE, 0xE6A5, 0xCDD7, 0x8A7E, 0x8A80, 0xB7C1, 0xE5FC, 0xE5FD, 0xE6A3, 0x8A81, 0x8A82, 0xC4DD, 0xE6A8, 0x8A83, 0x8A84, 0xE6A7, 0x8A85, 0x8A86, 0x8A87, 0x8A88, 0x8A89, 0x8A8A, 0xC3C3, 0x8A8B, 0xC6DE, 0x8A8C, 0x8A8D, 0xE6AA, 0x8A8E, 0x8A8F, 0x8A90, 0x8A91, 0x8A92, 0x8A93, 0x8A94, 0xC4B7, 0x8A95, 0x8A96, 0x8A97, 0xE6A2, 0xCABC, 0x8A98, 0x8A99, 0x8A9A, 0x8A9B, 0xBDE3, 0xB9C3, 0xE6A6, 0xD0D5, 0xCEAF, 0x8A9C, 0x8A9D, 0xE6A9, 0xE6B0, 0x8A9E, 0xD2A6, 0x8A9F, 0xBDAA, 0xE6AD, 0x8AA0, 0x8AA1, 0x8AA2, 0x8AA3, 0x8AA4, 0xE6AF, 0x8AA5, 0xC0D1, 0x8AA6, 0x8AA7, 0xD2CC, 0x8AA8, 0x8AA9, 0x8AAA, 0xBCA7, 0x8AAB, 0x8AAC, 0x8AAD, 0x8AAE, 0x8AAF, 0x8AB0, 0x8AB1, 0x8AB2, 0x8AB3, 0x8AB4, 0x8AB5, 0x8AB6, 0xE6B1, 0x8AB7, 0xD2F6, 0x8AB8, 0x8AB9, 0x8ABA, 0xD7CB, 0x8ABB, 0xCDFE, 0x8ABC, 0xCDDE, 0xC2A6, 0xE6AB, 0xE6AC, 0xBDBF, 0xE6AE, 0xE6B3, 0x8ABD, 0x8ABE, 0xE6B2, 0x8ABF, 0x8AC0, 0x8AC1, 0x8AC2, 0xE6B6, 0x8AC3, 0xE6B8, 0x8AC4, 0x8AC5, 0x8AC6, 0x8AC7, 0xC4EF, 0x8AC8, 0x8AC9, 0x8ACA, 0xC4C8, 0x8ACB, 0x8ACC, 0xBEEA, 0xC9EF, 0x8ACD, 0x8ACE, 0xE6B7, 0x8ACF, 0xB6F0, 0x8AD0, 0x8AD1, 0x8AD2, 0xC3E4, 0x8AD3, 0x8AD4, 0x8AD5, 0x8AD6, 0x8AD7, 0x8AD8, 0x8AD9, 0xD3E9, 0xE6B4, 0x8ADA, 0xE6B5, 0x8ADB, 0xC8A2, 0x8ADC, 0x8ADD, 0x8ADE, 0x8ADF, 0x8AE0, 0xE6BD, 0x8AE1, 0x8AE2, 0x8AE3, 0xE6B9, 0x8AE4, 0x8AE5, 0x8AE6, 0x8AE7, 0x8AE8, 0xC6C5, 0x8AE9, 0x8AEA, 0xCDF1, 0xE6BB, 0x8AEB, 0x8AEC, 0x8AED, 0x8AEE, 0x8AEF, 0x8AF0, 0x8AF1, 0x8AF2, 0x8AF3, 0x8AF4, 0xE6BC, 0x8AF5, 0x8AF6, 0x8AF7, 0x8AF8, 0xBBE9, 0x8AF9, 0x8AFA, 0x8AFB, 0x8AFC, 0x8AFD, 0x8AFE, 0x8B40, 0xE6BE, 0x8B41, 0x8B42, 0x8B43, 0x8B44, 0xE6BA, 0x8B45, 0x8B46, 0xC0B7, 0x8B47, 0x8B48, 0x8B49, 0x8B4A, 0x8B4B, 0x8B4C, 0x8B4D, 0x8B4E, 0x8B4F, 0xD3A4, 0xE6BF, 0xC9F4, 0xE6C3, 0x8B50, 0x8B51, 0xE6C4, 0x8B52, 0x8B53, 0x8B54, 0x8B55, 0xD0F6, 0x8B56, 0x8B57, 0x8B58, 0x8B59, 0x8B5A, 0x8B5B, 0x8B5C, 0x8B5D, 0x8B5E, 0x8B5F, 0x8B60, 0x8B61, 0x8B62, 0x8B63, 0x8B64, 0x8B65, 0x8B66, 0x8B67, 0xC3BD, 0x8B68, 0x8B69, 0x8B6A, 0x8B6B, 0x8B6C, 0x8B6D, 0x8B6E, 0xC3C4, 0xE6C2, 0x8B6F, 0x8B70, 0x8B71, 0x8B72, 0x8B73, 0x8B74, 0x8B75, 0x8B76, 0x8B77, 0x8B78, 0x8B79, 0x8B7A, 0x8B7B, 0x8B7C, 0xE6C1, 0x8B7D, 0x8B7E, 0x8B80, 0x8B81, 0x8B82, 0x8B83, 0x8B84, 0xE6C7, 0xCFB1, 0x8B85, 0xEBF4, 0x8B86, 0x8B87, 0xE6CA, 0x8B88, 0x8B89, 0x8B8A, 0x8B8B, 0x8B8C, 0xE6C5, 0x8B8D, 0x8B8E, 0xBCDE, 0xC9A9, 0x8B8F, 0x8B90, 0x8B91, 0x8B92, 0x8B93, 0x8B94, 0xBCB5, 0x8B95, 0x8B96, 0xCFD3, 0x8B97, 0x8B98, 0x8B99, 0x8B9A, 0x8B9B, 0xE6C8, 0x8B9C, 0xE6C9, 0x8B9D, 0xE6CE, 0x8B9E, 0xE6D0, 0x8B9F, 0x8BA0, 0x8BA1, 0xE6D1, 0x8BA2, 0x8BA3, 0x8BA4, 0xE6CB, 0xB5D5, 0x8BA5, 0xE6CC, 0x8BA6, 0x8BA7, 0xE6CF, 0x8BA8, 0x8BA9, 0xC4DB, 0x8BAA, 0xE6C6, 0x8BAB, 0x8BAC, 0x8BAD, 0x8BAE, 0x8BAF, 0xE6CD, 0x8BB0, 0x8BB1, 0x8BB2, 0x8BB3, 0x8BB4, 0x8BB5, 0x8BB6, 0x8BB7, 0x8BB8, 0x8BB9, 0x8BBA, 0x8BBB, 0x8BBC, 0x8BBD, 0x8BBE, 0x8BBF, 0x8BC0, 0x8BC1, 0x8BC2, 0x8BC3, 0x8BC4, 0x8BC5, 0x8BC6, 0xE6D2, 0x8BC7, 0x8BC8, 0x8BC9, 0x8BCA, 0x8BCB, 0x8BCC, 0x8BCD, 0x8BCE, 0x8BCF, 0x8BD0, 0x8BD1, 0x8BD2, 0xE6D4, 0xE6D3, 0x8BD3, 0x8BD4, 0x8BD5, 0x8BD6, 0x8BD7, 0x8BD8, 0x8BD9, 0x8BDA, 0x8BDB, 0x8BDC, 0x8BDD, 0x8BDE, 0x8BDF, 0x8BE0, 0x8BE1, 0x8BE2, 0x8BE3, 0x8BE4, 0x8BE5, 0x8BE6, 0x8BE7, 0x8BE8, 0x8BE9, 0x8BEA, 0x8BEB, 0x8BEC, 0xE6D5, 0x8BED, 0xD9F8, 0x8BEE, 0x8BEF, 0xE6D6, 0x8BF0, 0x8BF1, 0x8BF2, 0x8BF3, 0x8BF4, 0x8BF5, 0x8BF6, 0x8BF7, 0xE6D7, 0x8BF8, 0x8BF9, 0x8BFA, 0x8BFB, 0x8BFC, 0x8BFD, 0x8BFE, 0x8C40, 0x8C41, 0x8C42, 0x8C43, 0x8C44, 0x8C45, 0x8C46, 0x8C47, 0xD7D3, 0xE6DD, 0x8C48, 0xE6DE, 0xBFD7, 0xD4D0, 0x8C49, 0xD7D6, 0xB4E6, 0xCBEF, 0xE6DA, 0xD8C3, 0xD7CE, 0xD0A2, 0x8C4A, 0xC3CF, 0x8C4B, 0x8C4C, 0xE6DF, 0xBCBE, 0xB9C2, 0xE6DB, 0xD1A7, 0x8C4D, 0x8C4E, 0xBAA2, 0xC2CF, 0x8C4F, 0xD8AB, 0x8C50, 0x8C51, 0x8C52, 0xCAEB, 0xE5EE, 0x8C53, 0xE6DC, 0x8C54, 0xB7F5, 0x8C55, 0x8C56, 0x8C57, 0x8C58, 0xC8E6, 0x8C59, 0x8C5A, 0xC4F5, 0x8C5B, 0x8C5C, 0xE5B2, 0xC4FE, 0x8C5D, 0xCBFC, 0xE5B3, 0xD5AC, 0x8C5E, 0xD3EE, 0xCAD8, 0xB0B2, 0x8C5F, 0xCBCE, 0xCDEA, 0x8C60, 0x8C61, 0xBAEA, 0x8C62, 0x8C63, 0x8C64, 0xE5B5, 0x8C65, 0xE5B4, 0x8C66, 0xD7DA, 0xB9D9, 0xD6E6, 0xB6A8, 0xCDF0, 0xD2CB, 0xB1A6, 0xCAB5, 0x8C67, 0xB3E8, 0xC9F3, 0xBFCD, 0xD0FB, 0xCAD2, 0xE5B6, 0xBBC2, 0x8C68, 0x8C69, 0x8C6A, 0xCFDC, 0xB9AC, 0x8C6B, 0x8C6C, 0x8C6D, 0x8C6E, 0xD4D7, 0x8C6F, 0x8C70, 0xBAA6, 0xD1E7, 0xCFFC, 0xBCD2, 0x8C71, 0xE5B7, 0xC8DD, 0x8C72, 0x8C73, 0x8C74, 0xBFED, 0xB1F6, 0xCBDE, 0x8C75, 0x8C76, 0xBCC5, 0x8C77, 0xBCC4, 0xD2FA, 0xC3DC, 0xBFDC, 0x8C78, 0x8C79, 0x8C7A, 0x8C7B, 0xB8BB, 0x8C7C, 0x8C7D, 0x8C7E, 0xC3C2, 0x8C80, 0xBAAE, 0xD4A2, 0x8C81, 0x8C82, 0x8C83, 0x8C84, 0x8C85, 0x8C86, 0x8C87, 0x8C88, 0x8C89, 0xC7DE, 0xC4AF, 0xB2EC, 0x8C8A, 0xB9D1, 0x8C8B, 0x8C8C, 0xE5BB, 0xC1C8, 0x8C8D, 0x8C8E, 0xD5AF, 0x8C8F, 0x8C90, 0x8C91, 0x8C92, 0x8C93, 0xE5BC, 0x8C94, 0xE5BE, 0x8C95, 0x8C96, 0x8C97, 0x8C98, 0x8C99, 0x8C9A, 0x8C9B, 0xB4E7, 0xB6D4, 0xCBC2, 0xD1B0, 0xB5BC, 0x8C9C, 0x8C9D, 0xCAD9, 0x8C9E, 0xB7E2, 0x8C9F, 0x8CA0, 0xC9E4, 0x8CA1, 0xBDAB, 0x8CA2, 0x8CA3, 0xCEBE, 0xD7F0, 0x8CA4, 0x8CA5, 0x8CA6, 0x8CA7, 0xD0A1, 0x8CA8, 0xC9D9, 0x8CA9, 0x8CAA, 0xB6FB, 0xE6D8, 0xBCE2, 0x8CAB, 0xB3BE, 0x8CAC, 0xC9D0, 0x8CAD, 0xE6D9, 0xB3A2, 0x8CAE, 0x8CAF, 0x8CB0, 0x8CB1, 0xDECC, 0x8CB2, 0xD3C8, 0xDECD, 0x8CB3, 0xD2A2, 0x8CB4, 0x8CB5, 0x8CB6, 0x8CB7, 0xDECE, 0x8CB8, 0x8CB9, 0x8CBA, 0x8CBB, 0xBECD, 0x8CBC, 0x8CBD, 0xDECF, 0x8CBE, 0x8CBF, 0x8CC0, 0xCAAC, 0xD2FC, 0xB3DF, 0xE5EA, 0xC4E1, 0xBEA1, 0xCEB2, 0xC4F2, 0xBED6, 0xC6A8, 0xB2E3, 0x8CC1, 0x8CC2, 0xBED3, 0x8CC3, 0x8CC4, 0xC7FC, 0xCCEB, 0xBDEC, 0xCEDD, 0x8CC5, 0x8CC6, 0xCABA, 0xC6C1, 0xE5EC, 0xD0BC, 0x8CC7, 0x8CC8, 0x8CC9, 0xD5B9, 0x8CCA, 0x8CCB, 0x8CCC, 0xE5ED, 0x8CCD, 0x8CCE, 0x8CCF, 0x8CD0, 0xCAF4, 0x8CD1, 0xCDC0, 0xC2C5, 0x8CD2, 0xE5EF, 0x8CD3, 0xC2C4, 0xE5F0, 0x8CD4, 0x8CD5, 0x8CD6, 0x8CD7, 0x8CD8, 0x8CD9, 0x8CDA, 0xE5F8, 0xCDCD, 0x8CDB, 0xC9BD, 0x8CDC, 0x8CDD, 0x8CDE, 0x8CDF, 0x8CE0, 0x8CE1, 0x8CE2, 0xD2D9, 0xE1A8, 0x8CE3, 0x8CE4, 0x8CE5, 0x8CE6, 0xD3EC, 0x8CE7, 0xCBEA, 0xC6F1, 0x8CE8, 0x8CE9, 0x8CEA, 0x8CEB, 0x8CEC, 0xE1AC, 0x8CED, 0x8CEE, 0x8CEF, 0xE1A7, 0xE1A9, 0x8CF0, 0x8CF1, 0xE1AA, 0xE1AF, 0x8CF2, 0x8CF3, 0xB2ED, 0x8CF4, 0xE1AB, 0xB8DA, 0xE1AD, 0xE1AE, 0xE1B0, 0xB5BA, 0xE1B1, 0x8CF5, 0x8CF6, 0x8CF7, 0x8CF8, 0x8CF9, 0xE1B3, 0xE1B8, 0x8CFA, 0x8CFB, 0x8CFC, 0x8CFD, 0x8CFE, 0xD1D2, 0x8D40, 0xE1B6, 0xE1B5, 0xC1EB, 0x8D41, 0x8D42, 0x8D43, 0xE1B7, 0x8D44, 0xD4C0, 0x8D45, 0xE1B2, 0x8D46, 0xE1BA, 0xB0B6, 0x8D47, 0x8D48, 0x8D49, 0x8D4A, 0xE1B4, 0x8D4B, 0xBFF9, 0x8D4C, 0xE1B9, 0x8D4D, 0x8D4E, 0xE1BB, 0x8D4F, 0x8D50, 0x8D51, 0x8D52, 0x8D53, 0x8D54, 0xE1BE, 0x8D55, 0x8D56, 0x8D57, 0x8D58, 0x8D59, 0x8D5A, 0xE1BC, 0x8D5B, 0x8D5C, 0x8D5D, 0x8D5E, 0x8D5F, 0x8D60, 0xD6C5, 0x8D61, 0x8D62, 0x8D63, 0x8D64, 0x8D65, 0x8D66, 0x8D67, 0xCFBF, 0x8D68, 0x8D69, 0xE1BD, 0xE1BF, 0xC2CD, 0x8D6A, 0xB6EB, 0x8D6B, 0xD3F8, 0x8D6C, 0x8D6D, 0xC7CD, 0x8D6E, 0x8D6F, 0xB7E5, 0x8D70, 0x8D71, 0x8D72, 0x8D73, 0x8D74, 0x8D75, 0x8D76, 0x8D77, 0x8D78, 0x8D79, 0xBEFE, 0x8D7A, 0x8D7B, 0x8D7C, 0x8D7D, 0x8D7E, 0x8D80, 0xE1C0, 0xE1C1, 0x8D81, 0x8D82, 0xE1C7, 0xB3E7, 0x8D83, 0x8D84, 0x8D85, 0x8D86, 0x8D87, 0x8D88, 0xC6E9, 0x8D89, 0x8D8A, 0x8D8B, 0x8D8C, 0x8D8D, 0xB4DE, 0x8D8E, 0xD1C2, 0x8D8F, 0x8D90, 0x8D91, 0x8D92, 0xE1C8, 0x8D93, 0x8D94, 0xE1C6, 0x8D95, 0x8D96, 0x8D97, 0x8D98, 0x8D99, 0xE1C5, 0x8D9A, 0xE1C3, 0xE1C2, 0x8D9B, 0xB1C0, 0x8D9C, 0x8D9D, 0x8D9E, 0xD5B8, 0xE1C4, 0x8D9F, 0x8DA0, 0x8DA1, 0x8DA2, 0x8DA3, 0xE1CB, 0x8DA4, 0x8DA5, 0x8DA6, 0x8DA7, 0x8DA8, 0x8DA9, 0x8DAA, 0x8DAB, 0xE1CC, 0xE1CA, 0x8DAC, 0x8DAD, 0x8DAE, 0x8DAF, 0x8DB0, 0x8DB1, 0x8DB2, 0x8DB3, 0xEFFA, 0x8DB4, 0x8DB5, 0xE1D3, 0xE1D2, 0xC7B6, 0x8DB6, 0x8DB7, 0x8DB8, 0x8DB9, 0x8DBA, 0x8DBB, 0x8DBC, 0x8DBD, 0x8DBE, 0x8DBF, 0x8DC0, 0xE1C9, 0x8DC1, 0x8DC2, 0xE1CE, 0x8DC3, 0xE1D0, 0x8DC4, 0x8DC5, 0x8DC6, 0x8DC7, 0x8DC8, 0x8DC9, 0x8DCA, 0x8DCB, 0x8DCC, 0x8DCD, 0x8DCE, 0xE1D4, 0x8DCF, 0xE1D1, 0xE1CD, 0x8DD0, 0x8DD1, 0xE1CF, 0x8DD2, 0x8DD3, 0x8DD4, 0x8DD5, 0xE1D5, 0x8DD6, 0x8DD7, 0x8DD8, 0x8DD9, 0x8DDA, 0x8DDB, 0x8DDC, 0x8DDD, 0x8DDE, 0x8DDF, 0x8DE0, 0x8DE1, 0x8DE2, 0xE1D6, 0x8DE3, 0x8DE4, 0x8DE5, 0x8DE6, 0x8DE7, 0x8DE8, 0x8DE9, 0x8DEA, 0x8DEB, 0x8DEC, 0x8DED, 0x8DEE, 0x8DEF, 0x8DF0, 0x8DF1, 0x8DF2, 0x8DF3, 0x8DF4, 0x8DF5, 0x8DF6, 0x8DF7, 0x8DF8, 0xE1D7, 0x8DF9, 0x8DFA, 0x8DFB, 0xE1D8, 0x8DFC, 0x8DFD, 0x8DFE, 0x8E40, 0x8E41, 0x8E42, 0x8E43, 0x8E44, 0x8E45, 0x8E46, 0x8E47, 0x8E48, 0x8E49, 0x8E4A, 0x8E4B, 0x8E4C, 0x8E4D, 0x8E4E, 0x8E4F, 0x8E50, 0x8E51, 0x8E52, 0x8E53, 0x8E54, 0x8E55, 0xE1DA, 0x8E56, 0x8E57, 0x8E58, 0x8E59, 0x8E5A, 0x8E5B, 0x8E5C, 0x8E5D, 0x8E5E, 0x8E5F, 0x8E60, 0x8E61, 0x8E62, 0xE1DB, 0x8E63, 0x8E64, 0x8E65, 0x8E66, 0x8E67, 0x8E68, 0x8E69, 0xCEA1, 0x8E6A, 0x8E6B, 0x8E6C, 0x8E6D, 0x8E6E, 0x8E6F, 0x8E70, 0x8E71, 0x8E72, 0x8E73, 0x8E74, 0x8E75, 0x8E76, 0xE7DD, 0x8E77, 0xB4A8, 0xD6DD, 0x8E78, 0x8E79, 0xD1B2, 0xB3B2, 0x8E7A, 0x8E7B, 0xB9A4, 0xD7F3, 0xC7C9, 0xBEDE, 0xB9AE, 0x8E7C, 0xCED7, 0x8E7D, 0x8E7E, 0xB2EE, 0xDBCF, 0x8E80, 0xBCBA, 0xD2D1, 0xCBC8, 0xB0CD, 0x8E81, 0x8E82, 0xCFEF, 0x8E83, 0x8E84, 0x8E85, 0x8E86, 0x8E87, 0xD9E3, 0xBDED, 0x8E88, 0x8E89, 0xB1D2, 0xCAD0, 0xB2BC, 0x8E8A, 0xCBA7, 0xB7AB, 0x8E8B, 0xCAA6, 0x8E8C, 0x8E8D, 0x8E8E, 0xCFA3, 0x8E8F, 0x8E90, 0xE0F8, 0xD5CA, 0xE0FB, 0x8E91, 0x8E92, 0xE0FA, 0xC5C1, 0xCCFB, 0x8E93, 0xC1B1, 0xE0F9, 0xD6E3, 0xB2AF, 0xD6C4, 0xB5DB, 0x8E94, 0x8E95, 0x8E96, 0x8E97, 0x8E98, 0x8E99, 0x8E9A, 0x8E9B, 0xB4F8, 0xD6A1, 0x8E9C, 0x8E9D, 0x8E9E, 0x8E9F, 0x8EA0, 0xCFAF, 0xB0EF, 0x8EA1, 0x8EA2, 0xE0FC, 0x8EA3, 0x8EA4, 0x8EA5, 0x8EA6, 0x8EA7, 0xE1A1, 0xB3A3, 0x8EA8, 0x8EA9, 0xE0FD, 0xE0FE, 0xC3B1, 0x8EAA, 0x8EAB, 0x8EAC, 0x8EAD, 0xC3DD, 0x8EAE, 0xE1A2, 0xB7F9, 0x8EAF, 0x8EB0, 0x8EB1, 0x8EB2, 0x8EB3, 0x8EB4, 0xBBCF, 0x8EB5, 0x8EB6, 0x8EB7, 0x8EB8, 0x8EB9, 0x8EBA, 0x8EBB, 0xE1A3, 0xC4BB, 0x8EBC, 0x8EBD, 0x8EBE, 0x8EBF, 0x8EC0, 0xE1A4, 0x8EC1, 0x8EC2, 0xE1A5, 0x8EC3, 0x8EC4, 0xE1A6, 0xB4B1, 0x8EC5, 0x8EC6, 0x8EC7, 0x8EC8, 0x8EC9, 0x8ECA, 0x8ECB, 0x8ECC, 0x8ECD, 0x8ECE, 0x8ECF, 0x8ED0, 0x8ED1, 0x8ED2, 0x8ED3, 0xB8C9, 0xC6BD, 0xC4EA, 0x8ED4, 0xB2A2, 0x8ED5, 0xD0D2, 0x8ED6, 0xE7DB, 0xBBC3, 0xD3D7, 0xD3C4, 0x8ED7, 0xB9E3, 0xE2CF, 0x8ED8, 0x8ED9, 0x8EDA, 0xD7AF, 0x8EDB, 0xC7EC, 0xB1D3, 0x8EDC, 0x8EDD, 0xB4B2, 0xE2D1, 0x8EDE, 0x8EDF, 0x8EE0, 0xD0F2, 0xC2AE, 0xE2D0, 0x8EE1, 0xBFE2, 0xD3A6, 0xB5D7, 0xE2D2, 0xB5EA, 0x8EE2, 0xC3ED, 0xB8FD, 0x8EE3, 0xB8AE, 0x8EE4, 0xC5D3, 0xB7CF, 0xE2D4, 0x8EE5, 0x8EE6, 0x8EE7, 0x8EE8, 0xE2D3, 0xB6C8, 0xD7F9, 0x8EE9, 0x8EEA, 0x8EEB, 0x8EEC, 0x8EED, 0xCDA5, 0x8EEE, 0x8EEF, 0x8EF0, 0x8EF1, 0x8EF2, 0xE2D8, 0x8EF3, 0xE2D6, 0xCAFC, 0xBFB5, 0xD3B9, 0xE2D5, 0x8EF4, 0x8EF5, 0x8EF6, 0x8EF7, 0xE2D7, 0x8EF8, 0x8EF9, 0x8EFA, 0x8EFB, 0x8EFC, 0x8EFD, 0x8EFE, 0x8F40, 0x8F41, 0x8F42, 0xC1AE, 0xC0C8, 0x8F43, 0x8F44, 0x8F45, 0x8F46, 0x8F47, 0x8F48, 0xE2DB, 0xE2DA, 0xC0AA, 0x8F49, 0x8F4A, 0xC1CE, 0x8F4B, 0x8F4C, 0x8F4D, 0x8F4E, 0xE2DC, 0x8F4F, 0x8F50, 0x8F51, 0x8F52, 0x8F53, 0x8F54, 0x8F55, 0x8F56, 0x8F57, 0x8F58, 0x8F59, 0x8F5A, 0xE2DD, 0x8F5B, 0xE2DE, 0x8F5C, 0x8F5D, 0x8F5E, 0x8F5F, 0x8F60, 0x8F61, 0x8F62, 0x8F63, 0x8F64, 0xDBC8, 0x8F65, 0xD1D3, 0xCDA2, 0x8F66, 0x8F67, 0xBDA8, 0x8F68, 0x8F69, 0x8F6A, 0xDEC3, 0xD8A5, 0xBFAA, 0xDBCD, 0xD2EC, 0xC6FA, 0xC5AA, 0x8F6B, 0x8F6C, 0x8F6D, 0xDEC4, 0x8F6E, 0xB1D7, 0xDFAE, 0x8F6F, 0x8F70, 0x8F71, 0xCABD, 0x8F72, 0xDFB1, 0x8F73, 0xB9AD, 0x8F74, 0xD2FD, 0x8F75, 0xB8A5, 0xBAEB, 0x8F76, 0x8F77, 0xB3DA, 0x8F78, 0x8F79, 0x8F7A, 0xB5DC, 0xD5C5, 0x8F7B, 0x8F7C, 0x8F7D, 0x8F7E, 0xC3D6, 0xCFD2, 0xBBA1, 0x8F80, 0xE5F3, 0xE5F2, 0x8F81, 0x8F82, 0xE5F4, 0x8F83, 0xCDE4, 0x8F84, 0xC8F5, 0x8F85, 0x8F86, 0x8F87, 0x8F88, 0x8F89, 0x8F8A, 0x8F8B, 0xB5AF, 0xC7BF, 0x8F8C, 0xE5F6, 0x8F8D, 0x8F8E, 0x8F8F, 0xECB0, 0x8F90, 0x8F91, 0x8F92, 0x8F93, 0x8F94, 0x8F95, 0x8F96, 0x8F97, 0x8F98, 0x8F99, 0x8F9A, 0x8F9B, 0x8F9C, 0x8F9D, 0x8F9E, 0xE5E6, 0x8F9F, 0xB9E9, 0xB5B1, 0x8FA0, 0xC2BC, 0xE5E8, 0xE5E7, 0xE5E9, 0x8FA1, 0x8FA2, 0x8FA3, 0x8FA4, 0xD2CD, 0x8FA5, 0x8FA6, 0x8FA7, 0xE1EA, 0xD0CE, 0x8FA8, 0xCDAE, 0x8FA9, 0xD1E5, 0x8FAA, 0x8FAB, 0xB2CA, 0xB1EB, 0x8FAC, 0xB1F2, 0xC5ED, 0x8FAD, 0x8FAE, 0xD5C3, 0xD3B0, 0x8FAF, 0xE1DC, 0x8FB0, 0x8FB1, 0x8FB2, 0xE1DD, 0x8FB3, 0xD2DB, 0x8FB4, 0xB3B9, 0xB1CB, 0x8FB5, 0x8FB6, 0x8FB7, 0xCDF9, 0xD5F7, 0xE1DE, 0x8FB8, 0xBEB6, 0xB4FD, 0x8FB9, 0xE1DF, 0xBADC, 0xE1E0, 0xBBB2, 0xC2C9, 0xE1E1, 0x8FBA, 0x8FBB, 0x8FBC, 0xD0EC, 0x8FBD, 0xCDBD, 0x8FBE, 0x8FBF, 0xE1E2, 0x8FC0, 0xB5C3, 0xC5C7, 0xE1E3, 0x8FC1, 0x8FC2, 0xE1E4, 0x8FC3, 0x8FC4, 0x8FC5, 0x8FC6, 0xD3F9, 0x8FC7, 0x8FC8, 0x8FC9, 0x8FCA, 0x8FCB, 0x8FCC, 0xE1E5, 0x8FCD, 0xD1AD, 0x8FCE, 0x8FCF, 0xE1E6, 0xCEA2, 0x8FD0, 0x8FD1, 0x8FD2, 0x8FD3, 0x8FD4, 0x8FD5, 0xE1E7, 0x8FD6, 0xB5C2, 0x8FD7, 0x8FD8, 0x8FD9, 0x8FDA, 0xE1E8, 0xBBD5, 0x8FDB, 0x8FDC, 0x8FDD, 0x8FDE, 0x8FDF, 0xD0C4, 0xE2E0, 0xB1D8, 0xD2E4, 0x8FE0, 0x8FE1, 0xE2E1, 0x8FE2, 0x8FE3, 0xBCC9, 0xC8CC, 0x8FE4, 0xE2E3, 0xECFE, 0xECFD, 0xDFAF, 0x8FE5, 0x8FE6, 0x8FE7, 0xE2E2, 0xD6BE, 0xCDFC, 0xC3A6, 0x8FE8, 0x8FE9, 0x8FEA, 0xE3C3, 0x8FEB, 0x8FEC, 0xD6D2, 0xE2E7, 0x8FED, 0x8FEE, 0xE2E8, 0x8FEF, 0x8FF0, 0xD3C7, 0x8FF1, 0x8FF2, 0xE2EC, 0xBFEC, 0x8FF3, 0xE2ED, 0xE2E5, 0x8FF4, 0x8FF5, 0xB3C0, 0x8FF6, 0x8FF7, 0x8FF8, 0xC4EE, 0x8FF9, 0x8FFA, 0xE2EE, 0x8FFB, 0x8FFC, 0xD0C3, 0x8FFD, 0xBAF6, 0xE2E9, 0xB7DE, 0xBBB3, 0xCCAC, 0xCBCB, 0xE2E4, 0xE2E6, 0xE2EA, 0xE2EB, 0x8FFE, 0x9040, 0x9041, 0xE2F7, 0x9042, 0x9043, 0xE2F4, 0xD4F5, 0xE2F3, 0x9044, 0x9045, 0xC5AD, 0x9046, 0xD5FA, 0xC5C2, 0xB2C0, 0x9047, 0x9048, 0xE2EF, 0x9049, 0xE2F2, 0xC1AF, 0xCBBC, 0x904A, 0x904B, 0xB5A1, 0xE2F9, 0x904C, 0x904D, 0x904E, 0xBCB1, 0xE2F1, 0xD0D4, 0xD4B9, 0xE2F5, 0xB9D6, 0xE2F6, 0x904F, 0x9050, 0x9051, 0xC7D3, 0x9052, 0x9053, 0x9054, 0x9055, 0x9056, 0xE2F0, 0x9057, 0x9058, 0x9059, 0x905A, 0x905B, 0xD7DC, 0xEDA1, 0x905C, 0x905D, 0xE2F8, 0x905E, 0xEDA5, 0xE2FE, 0xCAD1, 0x905F, 0x9060, 0x9061, 0x9062, 0x9063, 0x9064, 0x9065, 0xC1B5, 0x9066, 0xBBD0, 0x9067, 0x9068, 0xBFD6, 0x9069, 0xBAE3, 0x906A, 0x906B, 0xCBA1, 0x906C, 0x906D, 0x906E, 0xEDA6, 0xEDA3, 0x906F, 0x9070, 0xEDA2, 0x9071, 0x9072, 0x9073, 0x9074, 0xBBD6, 0xEDA7, 0xD0F4, 0x9075, 0x9076, 0xEDA4, 0xBADE, 0xB6F7, 0xE3A1, 0xB6B2, 0xCCF1, 0xB9A7, 0x9077, 0xCFA2, 0xC7A1, 0x9078, 0x9079, 0xBFD2, 0x907A, 0x907B, 0xB6F1, 0x907C, 0xE2FA, 0xE2FB, 0xE2FD, 0xE2FC, 0xC4D5, 0xE3A2, 0x907D, 0xD3C1, 0x907E, 0x9080, 0x9081, 0xE3A7, 0xC7C4, 0x9082, 0x9083, 0x9084, 0x9085, 0xCFA4, 0x9086, 0x9087, 0xE3A9, 0xBAB7, 0x9088, 0x9089, 0x908A, 0x908B, 0xE3A8, 0x908C, 0xBBDA, 0x908D, 0xE3A3, 0x908E, 0x908F, 0x9090, 0xE3A4, 0xE3AA, 0x9091, 0xE3A6, 0x9092, 0xCEF2, 0xD3C6, 0x9093, 0x9094, 0xBBBC, 0x9095, 0x9096, 0xD4C3, 0x9097, 0xC4FA, 0x9098, 0x9099, 0xEDA8, 0xD0FC, 0xE3A5, 0x909A, 0xC3F5, 0x909B, 0xE3AD, 0xB1AF, 0x909C, 0xE3B2, 0x909D, 0x909E, 0x909F, 0xBCC2, 0x90A0, 0x90A1, 0xE3AC, 0xB5BF, 0x90A2, 0x90A3, 0x90A4, 0x90A5, 0x90A6, 0x90A7, 0x90A8, 0x90A9, 0xC7E9, 0xE3B0, 0x90AA, 0x90AB, 0x90AC, 0xBEAA, 0xCDEF, 0x90AD, 0x90AE, 0x90AF, 0x90B0, 0x90B1, 0xBBF3, 0x90B2, 0x90B3, 0x90B4, 0xCCE8, 0x90B5, 0x90B6, 0xE3AF, 0x90B7, 0xE3B1, 0x90B8, 0xCFA7, 0xE3AE, 0x90B9, 0xCEA9, 0xBBDD, 0x90BA, 0x90BB, 0x90BC, 0x90BD, 0x90BE, 0xB5EB, 0xBEE5, 0xB2D2, 0xB3CD, 0x90BF, 0xB1B9, 0xE3AB, 0xB2D1, 0xB5AC, 0xB9DF, 0xB6E8, 0x90C0, 0x90C1, 0xCFEB, 0xE3B7, 0x90C2, 0xBBCC, 0x90C3, 0x90C4, 0xC8C7, 0xD0CA, 0x90C5, 0x90C6, 0x90C7, 0x90C8, 0x90C9, 0xE3B8, 0xB3EE, 0x90CA, 0x90CB, 0x90CC, 0x90CD, 0xEDA9, 0x90CE, 0xD3FA, 0xD3E4, 0x90CF, 0x90D0, 0x90D1, 0xEDAA, 0xE3B9, 0xD2E2, 0x90D2, 0x90D3, 0x90D4, 0x90D5, 0x90D6, 0xE3B5, 0x90D7, 0x90D8, 0x90D9, 0x90DA, 0xD3DE, 0x90DB, 0x90DC, 0x90DD, 0x90DE, 0xB8D0, 0xE3B3, 0x90DF, 0x90E0, 0xE3B6, 0xB7DF, 0x90E1, 0xE3B4, 0xC0A2, 0x90E2, 0x90E3, 0x90E4, 0xE3BA, 0x90E5, 0x90E6, 0x90E7, 0x90E8, 0x90E9, 0x90EA, 0x90EB, 0x90EC, 0x90ED, 0x90EE, 0x90EF, 0x90F0, 0x90F1, 0x90F2, 0x90F3, 0x90F4, 0x90F5, 0x90F6, 0x90F7, 0xD4B8, 0x90F8, 0x90F9, 0x90FA, 0x90FB, 0x90FC, 0x90FD, 0x90FE, 0x9140, 0xB4C8, 0x9141, 0xE3BB, 0x9142, 0xBBC5, 0x9143, 0xC9F7, 0x9144, 0x9145, 0xC9E5, 0x9146, 0x9147, 0x9148, 0xC4BD, 0x9149, 0x914A, 0x914B, 0x914C, 0x914D, 0x914E, 0x914F, 0xEDAB, 0x9150, 0x9151, 0x9152, 0x9153, 0xC2FD, 0x9154, 0x9155, 0x9156, 0x9157, 0xBBDB, 0xBFAE, 0x9158, 0x9159, 0x915A, 0x915B, 0x915C, 0x915D, 0x915E, 0xCEBF, 0x915F, 0x9160, 0x9161, 0x9162, 0xE3BC, 0x9163, 0xBFB6, 0x9164, 0x9165, 0x9166, 0x9167, 0x9168, 0x9169, 0x916A, 0x916B, 0x916C, 0x916D, 0x916E, 0x916F, 0x9170, 0x9171, 0x9172, 0x9173, 0x9174, 0x9175, 0x9176, 0xB1EF, 0x9177, 0x9178, 0xD4F7, 0x9179, 0x917A, 0x917B, 0x917C, 0x917D, 0xE3BE, 0x917E, 0x9180, 0x9181, 0x9182, 0x9183, 0x9184, 0x9185, 0x9186, 0xEDAD, 0x9187, 0x9188, 0x9189, 0x918A, 0x918B, 0x918C, 0x918D, 0x918E, 0x918F, 0xE3BF, 0xBAA9, 0xEDAC, 0x9190, 0x9191, 0xE3BD, 0x9192, 0x9193, 0x9194, 0x9195, 0x9196, 0x9197, 0x9198, 0x9199, 0x919A, 0x919B, 0xE3C0, 0x919C, 0x919D, 0x919E, 0x919F, 0x91A0, 0x91A1, 0xBAB6, 0x91A2, 0x91A3, 0x91A4, 0xB6AE, 0x91A5, 0x91A6, 0x91A7, 0x91A8, 0x91A9, 0xD0B8, 0x91AA, 0xB0C3, 0xEDAE, 0x91AB, 0x91AC, 0x91AD, 0x91AE, 0x91AF, 0xEDAF, 0xC0C1, 0x91B0, 0xE3C1, 0x91B1, 0x91B2, 0x91B3, 0x91B4, 0x91B5, 0x91B6, 0x91B7, 0x91B8, 0x91B9, 0x91BA, 0x91BB, 0x91BC, 0x91BD, 0x91BE, 0x91BF, 0x91C0, 0x91C1, 0xC5B3, 0x91C2, 0x91C3, 0x91C4, 0x91C5, 0x91C6, 0x91C7, 0x91C8, 0x91C9, 0x91CA, 0x91CB, 0x91CC, 0x91CD, 0x91CE, 0x91CF, 0xE3C2, 0x91D0, 0x91D1, 0x91D2, 0x91D3, 0x91D4, 0x91D5, 0x91D6, 0x91D7, 0x91D8, 0xDCB2, 0x91D9, 0x91DA, 0x91DB, 0x91DC, 0x91DD, 0x91DE, 0xEDB0, 0x91DF, 0xB8EA, 0x91E0, 0xCEEC, 0xEAA7, 0xD0E7, 0xCAF9, 0xC8D6, 0xCFB7, 0xB3C9, 0xCED2, 0xBDE4, 0x91E1, 0x91E2, 0xE3DE, 0xBBF2, 0xEAA8, 0xD5BD, 0x91E3, 0xC6DD, 0xEAA9, 0x91E4, 0x91E5, 0x91E6, 0xEAAA, 0x91E7, 0xEAAC, 0xEAAB, 0x91E8, 0xEAAE, 0xEAAD, 0x91E9, 0x91EA, 0x91EB, 0x91EC, 0xBDD8, 0x91ED, 0xEAAF, 0x91EE, 0xC2BE, 0x91EF, 0x91F0, 0x91F1, 0x91F2, 0xB4C1, 0xB4F7, 0x91F3, 0x91F4, 0xBBA7, 0x91F5, 0x91F6, 0x91F7, 0x91F8, 0x91F9, 0xECE6, 0xECE5, 0xB7BF, 0xCBF9, 0xB1E2, 0x91FA, 0xECE7, 0x91FB, 0x91FC, 0x91FD, 0xC9C8, 0xECE8, 0xECE9, 0x91FE, 0xCAD6, 0xDED0, 0xB2C5, 0xD4FA, 0x9240, 0x9241, 0xC6CB, 0xB0C7, 0xB4F2, 0xC8D3, 0x9242, 0x9243, 0x9244, 0xCDD0, 0x9245, 0x9246, 0xBFB8, 0x9247, 0x9248, 0x9249, 0x924A, 0x924B, 0x924C, 0x924D, 0xBFDB, 0x924E, 0x924F, 0xC7A4, 0xD6B4, 0x9250, 0xC0A9, 0xDED1, 0xC9A8, 0xD1EF, 0xC5A4, 0xB0E7, 0xB3B6, 0xC8C5, 0x9251, 0x9252, 0xB0E2, 0x9253, 0x9254, 0xB7F6, 0x9255, 0x9256, 0xC5FA, 0x9257, 0x9258, 0xB6F3, 0x9259, 0xD5D2, 0xB3D0, 0xBCBC, 0x925A, 0x925B, 0x925C, 0xB3AD, 0x925D, 0x925E, 0x925F, 0x9260, 0xBEF1, 0xB0D1, 0x9261, 0x9262, 0x9263, 0x9264, 0x9265, 0x9266, 0xD2D6, 0xCAE3, 0xD7A5, 0x9267, 0xCDB6, 0xB6B6, 0xBFB9, 0xD5DB, 0x9268, 0xB8A7, 0xC5D7, 0x9269, 0x926A, 0x926B, 0xDED2, 0xBFD9, 0xC2D5, 0xC7C0, 0x926C, 0xBBA4, 0xB1A8, 0x926D, 0x926E, 0xC5EA, 0x926F, 0x9270, 0xC5FB, 0xCCA7, 0x9271, 0x9272, 0x9273, 0x9274, 0xB1A7, 0x9275, 0x9276, 0x9277, 0xB5D6, 0x9278, 0x9279, 0x927A, 0xC4A8, 0x927B, 0xDED3, 0xD1BA, 0xB3E9, 0x927C, 0xC3F2, 0x927D, 0x927E, 0xB7F7, 0x9280, 0xD6F4, 0xB5A3, 0xB2F0, 0xC4B4, 0xC4E9, 0xC0AD, 0xDED4, 0x9281, 0xB0E8, 0xC5C4, 0xC1E0, 0x9282, 0xB9D5, 0x9283, 0xBEDC, 0xCDD8, 0xB0CE, 0x9284, 0xCDCF, 0xDED6, 0xBED0, 0xD7BE, 0xDED5, 0xD5D0, 0xB0DD, 0x9285, 0x9286, 0xC4E2, 0x9287, 0x9288, 0xC2A3, 0xBCF0, 0x9289, 0xD3B5, 0xC0B9, 0xC5A1, 0xB2A6, 0xD4F1, 0x928A, 0x928B, 0xC0A8, 0xCAC3, 0xDED7, 0xD5FC, 0x928C, 0xB9B0, 0x928D, 0xC8AD, 0xCBA9, 0x928E, 0xDED9, 0xBFBD, 0x928F, 0x9290, 0x9291, 0x9292, 0xC6B4, 0xD7A7, 0xCAB0, 0xC4C3, 0x9293, 0xB3D6, 0xB9D2, 0x9294, 0x9295, 0x9296, 0x9297, 0xD6B8, 0xEAFC, 0xB0B4, 0x9298, 0x9299, 0x929A, 0x929B, 0xBFE6, 0x929C, 0x929D, 0xCCF4, 0x929E, 0x929F, 0x92A0, 0x92A1, 0xCDDA, 0x92A2, 0x92A3, 0x92A4, 0xD6BF, 0xC2CE, 0x92A5, 0xCECE, 0xCCA2, 0xD0AE, 0xC4D3, 0xB5B2, 0xDED8, 0xD5F5, 0xBCB7, 0xBBD3, 0x92A6, 0x92A7, 0xB0A4, 0x92A8, 0xC5B2, 0xB4EC, 0x92A9, 0x92AA, 0x92AB, 0xD5F1, 0x92AC, 0x92AD, 0xEAFD, 0x92AE, 0x92AF, 0x92B0, 0x92B1, 0x92B2, 0x92B3, 0xDEDA, 0xCDA6, 0x92B4, 0x92B5, 0xCDEC, 0x92B6, 0x92B7, 0x92B8, 0x92B9, 0xCEE6, 0xDEDC, 0x92BA, 0xCDB1, 0xC0A6, 0x92BB, 0x92BC, 0xD7BD, 0x92BD, 0xDEDB, 0xB0C6, 0xBAB4, 0xC9D3, 0xC4F3, 0xBEE8, 0x92BE, 0x92BF, 0x92C0, 0x92C1, 0xB2B6, 0x92C2, 0x92C3, 0x92C4, 0x92C5, 0x92C6, 0x92C7, 0x92C8, 0x92C9, 0xC0CC, 0xCBF0, 0x92CA, 0xBCF1, 0xBBBB, 0xB5B7, 0x92CB, 0x92CC, 0x92CD, 0xC5F5, 0x92CE, 0xDEE6, 0x92CF, 0x92D0, 0x92D1, 0xDEE3, 0xBEDD, 0x92D2, 0x92D3, 0xDEDF, 0x92D4, 0x92D5, 0x92D6, 0x92D7, 0xB4B7, 0xBDDD, 0x92D8, 0x92D9, 0xDEE0, 0xC4ED, 0x92DA, 0x92DB, 0x92DC, 0x92DD, 0xCFC6, 0x92DE, 0xB5E0, 0x92DF, 0x92E0, 0x92E1, 0x92E2, 0xB6DE, 0xCADA, 0xB5F4, 0xDEE5, 0x92E3, 0xD5C6, 0x92E4, 0xDEE1, 0xCCCD, 0xC6FE, 0x92E5, 0xC5C5, 0x92E6, 0x92E7, 0x92E8, 0xD2B4, 0x92E9, 0xBEF2, 0x92EA, 0x92EB, 0x92EC, 0x92ED, 0x92EE, 0x92EF, 0x92F0, 0xC2D3, 0x92F1, 0xCCBD, 0xB3B8, 0x92F2, 0xBDD3, 0x92F3, 0xBFD8, 0xCDC6, 0xD1DA, 0xB4EB, 0x92F4, 0xDEE4, 0xDEDD, 0xDEE7, 0x92F5, 0xEAFE, 0x92F6, 0x92F7, 0xC2B0, 0xDEE2, 0x92F8, 0x92F9, 0xD6C0, 0xB5A7, 0x92FA, 0xB2F4, 0x92FB, 0xDEE8, 0x92FC, 0xDEF2, 0x92FD, 0x92FE, 0x9340, 0x9341, 0x9342, 0xDEED, 0x9343, 0xDEF1, 0x9344, 0x9345, 0xC8E0, 0x9346, 0x9347, 0x9348, 0xD7E1, 0xDEEF, 0xC3E8, 0xCCE1, 0x9349, 0xB2E5, 0x934A, 0x934B, 0x934C, 0xD2BE, 0x934D, 0x934E, 0x934F, 0x9350, 0x9351, 0x9352, 0x9353, 0xDEEE, 0x9354, 0xDEEB, 0xCED5, 0x9355, 0xB4A7, 0x9356, 0x9357, 0x9358, 0x9359, 0x935A, 0xBFAB, 0xBEBE, 0x935B, 0x935C, 0xBDD2, 0x935D, 0x935E, 0x935F, 0x9360, 0xDEE9, 0x9361, 0xD4AE, 0x9362, 0xDEDE, 0x9363, 0xDEEA, 0x9364, 0x9365, 0x9366, 0x9367, 0xC0BF, 0x9368, 0xDEEC, 0xB2F3, 0xB8E9, 0xC2A7, 0x9369, 0x936A, 0xBDC1, 0x936B, 0x936C, 0x936D, 0x936E, 0x936F, 0xDEF5, 0xDEF8, 0x9370, 0x9371, 0xB2AB, 0xB4A4, 0x9372, 0x9373, 0xB4EA, 0xC9A6, 0x9374, 0x9375, 0x9376, 0x9377, 0x9378, 0x9379, 0xDEF6, 0xCBD1, 0x937A, 0xB8E3, 0x937B, 0xDEF7, 0xDEFA, 0x937C, 0x937D, 0x937E, 0x9380, 0xDEF9, 0x9381, 0x9382, 0x9383, 0xCCC2, 0x9384, 0xB0E1, 0xB4EE, 0x9385, 0x9386, 0x9387, 0x9388, 0x9389, 0x938A, 0xE5BA, 0x938B, 0x938C, 0x938D, 0x938E, 0x938F, 0xD0AF, 0x9390, 0x9391, 0xB2EB, 0x9392, 0xEBA1, 0x9393, 0xDEF4, 0x9394, 0x9395, 0xC9E3, 0xDEF3, 0xB0DA, 0xD2A1, 0xB1F7, 0x9396, 0xCCAF, 0x9397, 0x9398, 0x9399, 0x939A, 0x939B, 0x939C, 0x939D, 0xDEF0, 0x939E, 0xCBA4, 0x939F, 0x93A0, 0x93A1, 0xD5AA, 0x93A2, 0x93A3, 0x93A4, 0x93A5, 0x93A6, 0xDEFB, 0x93A7, 0x93A8, 0x93A9, 0x93AA, 0x93AB, 0x93AC, 0x93AD, 0x93AE, 0xB4DD, 0x93AF, 0xC4A6, 0x93B0, 0x93B1, 0x93B2, 0xDEFD, 0x93B3, 0x93B4, 0x93B5, 0x93B6, 0x93B7, 0x93B8, 0x93B9, 0x93BA, 0x93BB, 0x93BC, 0xC3FE, 0xC4A1, 0xDFA1, 0x93BD, 0x93BE, 0x93BF, 0x93C0, 0x93C1, 0x93C2, 0x93C3, 0xC1CC, 0x93C4, 0xDEFC, 0xBEEF, 0x93C5, 0xC6B2, 0x93C6, 0x93C7, 0x93C8, 0x93C9, 0x93CA, 0x93CB, 0x93CC, 0x93CD, 0x93CE, 0xB3C5, 0xC8F6, 0x93CF, 0x93D0, 0xCBBA, 0xDEFE, 0x93D1, 0x93D2, 0xDFA4, 0x93D3, 0x93D4, 0x93D5, 0x93D6, 0xD7B2, 0x93D7, 0x93D8, 0x93D9, 0x93DA, 0x93DB, 0xB3B7, 0x93DC, 0x93DD, 0x93DE, 0x93DF, 0xC1C3, 0x93E0, 0x93E1, 0xC7CB, 0xB2A5, 0xB4E9, 0x93E2, 0xD7AB, 0x93E3, 0x93E4, 0x93E5, 0x93E6, 0xC4EC, 0x93E7, 0xDFA2, 0xDFA3, 0x93E8, 0xDFA5, 0x93E9, 0xBAB3, 0x93EA, 0x93EB, 0x93EC, 0xDFA6, 0x93ED, 0xC0DE, 0x93EE, 0x93EF, 0xC9C3, 0x93F0, 0x93F1, 0x93F2, 0x93F3, 0x93F4, 0x93F5, 0x93F6, 0xB2D9, 0xC7E6, 0x93F7, 0xDFA7, 0x93F8, 0xC7DC, 0x93F9, 0x93FA, 0x93FB, 0x93FC, 0xDFA8, 0xEBA2, 0x93FD, 0x93FE, 0x9440, 0x9441, 0x9442, 0xCBD3, 0x9443, 0x9444, 0x9445, 0xDFAA, 0x9446, 0xDFA9, 0x9447, 0xB2C1, 0x9448, 0x9449, 0x944A, 0x944B, 0x944C, 0x944D, 0x944E, 0x944F, 0x9450, 0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457, 0x9458, 0x9459, 0x945A, 0x945B, 0x945C, 0x945D, 0x945E, 0x945F, 0x9460, 0xC5CA, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467, 0x9468, 0xDFAB, 0x9469, 0x946A, 0x946B, 0x946C, 0x946D, 0x946E, 0x946F, 0x9470, 0xD4DC, 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, 0xC8C1, 0x9476, 0x9477, 0x9478, 0x9479, 0x947A, 0x947B, 0x947C, 0x947D, 0x947E, 0x9480, 0x9481, 0x9482, 0xDFAC, 0x9483, 0x9484, 0x9485, 0x9486, 0x9487, 0xBEF0, 0x9488, 0x9489, 0xDFAD, 0xD6A7, 0x948A, 0x948B, 0x948C, 0x948D, 0xEAB7, 0xEBB6, 0xCAD5, 0x948E, 0xD8FC, 0xB8C4, 0x948F, 0xB9A5, 0x9490, 0x9491, 0xB7C5, 0xD5FE, 0x9492, 0x9493, 0x9494, 0x9495, 0x9496, 0xB9CA, 0x9497, 0x9498, 0xD0A7, 0xF4CD, 0x9499, 0x949A, 0xB5D0, 0x949B, 0x949C, 0xC3F4, 0x949D, 0xBEC8, 0x949E, 0x949F, 0x94A0, 0xEBB7, 0xB0BD, 0x94A1, 0x94A2, 0xBDCC, 0x94A3, 0xC1B2, 0x94A4, 0xB1D6, 0xB3A8, 0x94A5, 0x94A6, 0x94A7, 0xB8D2, 0xC9A2, 0x94A8, 0x94A9, 0xB6D8, 0x94AA, 0x94AB, 0x94AC, 0x94AD, 0xEBB8, 0xBEB4, 0x94AE, 0x94AF, 0x94B0, 0xCAFD, 0x94B1, 0xC7C3, 0x94B2, 0xD5FB, 0x94B3, 0x94B4, 0xB7F3, 0x94B5, 0x94B6, 0x94B7, 0x94B8, 0x94B9, 0x94BA, 0x94BB, 0x94BC, 0x94BD, 0x94BE, 0x94BF, 0x94C0, 0x94C1, 0x94C2, 0x94C3, 0xCEC4, 0x94C4, 0x94C5, 0x94C6, 0xD5AB, 0xB1F3, 0x94C7, 0x94C8, 0x94C9, 0xECB3, 0xB0DF, 0x94CA, 0xECB5, 0x94CB, 0x94CC, 0x94CD, 0xB6B7, 0x94CE, 0xC1CF, 0x94CF, 0xF5FA, 0xD0B1, 0x94D0, 0x94D1, 0xD5E5, 0x94D2, 0xCED3, 0x94D3, 0x94D4, 0xBDEF, 0xB3E2, 0x94D5, 0xB8AB, 0x94D6, 0xD5B6, 0x94D7, 0xEDBD, 0x94D8, 0xB6CF, 0x94D9, 0xCBB9, 0xD0C2, 0x94DA, 0x94DB, 0x94DC, 0x94DD, 0x94DE, 0x94DF, 0x94E0, 0x94E1, 0xB7BD, 0x94E2, 0x94E3, 0xECB6, 0xCAA9, 0x94E4, 0x94E5, 0x94E6, 0xC5D4, 0x94E7, 0xECB9, 0xECB8, 0xC2C3, 0xECB7, 0x94E8, 0x94E9, 0x94EA, 0x94EB, 0xD0FD, 0xECBA, 0x94EC, 0xECBB, 0xD7E5, 0x94ED, 0x94EE, 0xECBC, 0x94EF, 0x94F0, 0x94F1, 0xECBD, 0xC6EC, 0x94F2, 0x94F3, 0x94F4, 0x94F5, 0x94F6, 0x94F7, 0x94F8, 0x94F9, 0xCEDE, 0x94FA, 0xBCC8, 0x94FB, 0x94FC, 0xC8D5, 0xB5A9, 0xBEC9, 0xD6BC, 0xD4E7, 0x94FD, 0x94FE, 0xD1AE, 0xD0F1, 0xEAB8, 0xEAB9, 0xEABA, 0xBAB5, 0x9540, 0x9541, 0x9542, 0x9543, 0xCAB1, 0xBFF5, 0x9544, 0x9545, 0xCDFA, 0x9546, 0x9547, 0x9548, 0x9549, 0x954A, 0xEAC0, 0x954B, 0xB0BA, 0xEABE, 0x954C, 0x954D, 0xC0A5, 0x954E, 0x954F, 0x9550, 0xEABB, 0x9551, 0xB2FD, 0x9552, 0xC3F7, 0xBBE8, 0x9553, 0x9554, 0x9555, 0xD2D7, 0xCEF4, 0xEABF, 0x9556, 0x9557, 0x9558, 0xEABC, 0x9559, 0x955A, 0x955B, 0xEAC3, 0x955C, 0xD0C7, 0xD3B3, 0x955D, 0x955E, 0x955F, 0x9560, 0xB4BA, 0x9561, 0xC3C1, 0xD7F2, 0x9562, 0x9563, 0x9564, 0x9565, 0xD5D1, 0x9566, 0xCAC7, 0x9567, 0xEAC5, 0x9568, 0x9569, 0xEAC4, 0xEAC7, 0xEAC6, 0x956A, 0x956B, 0x956C, 0x956D, 0x956E, 0xD6E7, 0x956F, 0xCFD4, 0x9570, 0x9571, 0xEACB, 0x9572, 0xBBCE, 0x9573, 0x9574, 0x9575, 0x9576, 0x9577, 0x9578, 0x9579, 0xBDFA, 0xC9CE, 0x957A, 0x957B, 0xEACC, 0x957C, 0x957D, 0xC9B9, 0xCFFE, 0xEACA, 0xD4CE, 0xEACD, 0xEACF, 0x957E, 0x9580, 0xCDED, 0x9581, 0x9582, 0x9583, 0x9584, 0xEAC9, 0x9585, 0xEACE, 0x9586, 0x9587, 0xCEEE, 0x9588, 0xBBDE, 0x9589, 0xB3BF, 0x958A, 0x958B, 0x958C, 0x958D, 0x958E, 0xC6D5, 0xBEB0, 0xCEFA, 0x958F, 0x9590, 0x9591, 0xC7E7, 0x9592, 0xBEA7, 0xEAD0, 0x9593, 0x9594, 0xD6C7, 0x9595, 0x9596, 0x9597, 0xC1C0, 0x9598, 0x9599, 0x959A, 0xD4DD, 0x959B, 0xEAD1, 0x959C, 0x959D, 0xCFBE, 0x959E, 0x959F, 0x95A0, 0x95A1, 0xEAD2, 0x95A2, 0x95A3, 0x95A4, 0x95A5, 0xCAEE, 0x95A6, 0x95A7, 0x95A8, 0x95A9, 0xC5AF, 0xB0B5, 0x95AA, 0x95AB, 0x95AC, 0x95AD, 0x95AE, 0xEAD4, 0x95AF, 0x95B0, 0x95B1, 0x95B2, 0x95B3, 0x95B4, 0x95B5, 0x95B6, 0x95B7, 0xEAD3, 0xF4DF, 0x95B8, 0x95B9, 0x95BA, 0x95BB, 0x95BC, 0xC4BA, 0x95BD, 0x95BE, 0x95BF, 0x95C0, 0x95C1, 0xB1A9, 0x95C2, 0x95C3, 0x95C4, 0x95C5, 0xE5DF, 0x95C6, 0x95C7, 0x95C8, 0x95C9, 0xEAD5, 0x95CA, 0x95CB, 0x95CC, 0x95CD, 0x95CE, 0x95CF, 0x95D0, 0x95D1, 0x95D2, 0x95D3, 0x95D4, 0x95D5, 0x95D6, 0x95D7, 0x95D8, 0x95D9, 0x95DA, 0x95DB, 0x95DC, 0x95DD, 0x95DE, 0x95DF, 0x95E0, 0x95E1, 0x95E2, 0x95E3, 0xCAEF, 0x95E4, 0xEAD6, 0xEAD7, 0xC6D8, 0x95E5, 0x95E6, 0x95E7, 0x95E8, 0x95E9, 0x95EA, 0x95EB, 0x95EC, 0xEAD8, 0x95ED, 0x95EE, 0xEAD9, 0x95EF, 0x95F0, 0x95F1, 0x95F2, 0x95F3, 0x95F4, 0xD4BB, 0x95F5, 0xC7FA, 0xD2B7, 0xB8FC, 0x95F6, 0x95F7, 0xEAC2, 0x95F8, 0xB2DC, 0x95F9, 0x95FA, 0xC2FC, 0x95FB, 0xD4F8, 0xCCE6, 0xD7EE, 0x95FC, 0x95FD, 0x95FE, 0x9640, 0x9641, 0x9642, 0x9643, 0xD4C2, 0xD3D0, 0xEBC3, 0xC5F3, 0x9644, 0xB7FE, 0x9645, 0x9646, 0xEBD4, 0x9647, 0x9648, 0x9649, 0xCBB7, 0xEBDE, 0x964A, 0xC0CA, 0x964B, 0x964C, 0x964D, 0xCDFB, 0x964E, 0xB3AF, 0x964F, 0xC6DA, 0x9650, 0x9651, 0x9652, 0x9653, 0x9654, 0x9655, 0xEBFC, 0x9656, 0xC4BE, 0x9657, 0xCEB4, 0xC4A9, 0xB1BE, 0xD4FD, 0x9658, 0xCAF5, 0x9659, 0xD6EC, 0x965A, 0x965B, 0xC6D3, 0xB6E4, 0x965C, 0x965D, 0x965E, 0x965F, 0xBBFA, 0x9660, 0x9661, 0xD0E0, 0x9662, 0x9663, 0xC9B1, 0x9664, 0xD4D3, 0xC8A8, 0x9665, 0x9666, 0xB8CB, 0x9667, 0xE8BE, 0xC9BC, 0x9668, 0x9669, 0xE8BB, 0x966A, 0xC0EE, 0xD0D3, 0xB2C4, 0xB4E5, 0x966B, 0xE8BC, 0x966C, 0x966D, 0xD5C8, 0x966E, 0x966F, 0x9670, 0x9671, 0x9672, 0xB6C5, 0x9673, 0xE8BD, 0xCAF8, 0xB8DC, 0xCCF5, 0x9674, 0x9675, 0x9676, 0xC0B4, 0x9677, 0x9678, 0xD1EE, 0xE8BF, 0xE8C2, 0x9679, 0x967A, 0xBABC, 0x967B, 0xB1AD, 0xBDDC, 0x967C, 0xEABD, 0xE8C3, 0x967D, 0xE8C6, 0x967E, 0xE8CB, 0x9680, 0x9681, 0x9682, 0x9683, 0xE8CC, 0x9684, 0xCBC9, 0xB0E5, 0x9685, 0xBCAB, 0x9686, 0x9687, 0xB9B9, 0x9688, 0x9689, 0xE8C1, 0x968A, 0xCDF7, 0x968B, 0xE8CA, 0x968C, 0x968D, 0x968E, 0x968F, 0xCEF6, 0x9690, 0x9691, 0x9692, 0x9693, 0xD5ED, 0x9694, 0xC1D6, 0xE8C4, 0x9695, 0xC3B6, 0x9696, 0xB9FB, 0xD6A6, 0xE8C8, 0x9697, 0x9698, 0x9699, 0xCAE0, 0xD4E6, 0x969A, 0xE8C0, 0x969B, 0xE8C5, 0xE8C7, 0x969C, 0xC7B9, 0xB7E3, 0x969D, 0xE8C9, 0x969E, 0xBFDD, 0xE8D2, 0x969F, 0x96A0, 0xE8D7, 0x96A1, 0xE8D5, 0xBCDC, 0xBCCF, 0xE8DB, 0x96A2, 0x96A3, 0x96A4, 0x96A5, 0x96A6, 0x96A7, 0x96A8, 0x96A9, 0xE8DE, 0x96AA, 0xE8DA, 0xB1FA, 0x96AB, 0x96AC, 0x96AD, 0x96AE, 0x96AF, 0x96B0, 0x96B1, 0x96B2, 0x96B3, 0x96B4, 0xB0D8, 0xC4B3, 0xB8CC, 0xC6E2, 0xC8BE, 0xC8E1, 0x96B5, 0x96B6, 0x96B7, 0xE8CF, 0xE8D4, 0xE8D6, 0x96B8, 0xB9F1, 0xE8D8, 0xD7F5, 0x96B9, 0xC4FB, 0x96BA, 0xE8DC, 0x96BB, 0x96BC, 0xB2E9, 0x96BD, 0x96BE, 0x96BF, 0xE8D1, 0x96C0, 0x96C1, 0xBCED, 0x96C2, 0x96C3, 0xBFC2, 0xE8CD, 0xD6F9, 0x96C4, 0xC1F8, 0xB2F1, 0x96C5, 0x96C6, 0x96C7, 0x96C8, 0x96C9, 0x96CA, 0x96CB, 0x96CC, 0xE8DF, 0x96CD, 0xCAC1, 0xE8D9, 0x96CE, 0x96CF, 0x96D0, 0x96D1, 0xD5A4, 0x96D2, 0xB1EA, 0xD5BB, 0xE8CE, 0xE8D0, 0xB6B0, 0xE8D3, 0x96D3, 0xE8DD, 0xC0B8, 0x96D4, 0xCAF7, 0x96D5, 0xCBA8, 0x96D6, 0x96D7, 0xC6DC, 0xC0F5, 0x96D8, 0x96D9, 0x96DA, 0x96DB, 0x96DC, 0xE8E9, 0x96DD, 0x96DE, 0x96DF, 0xD0A3, 0x96E0, 0x96E1, 0x96E2, 0x96E3, 0x96E4, 0x96E5, 0x96E6, 0xE8F2, 0xD6EA, 0x96E7, 0x96E8, 0x96E9, 0x96EA, 0x96EB, 0x96EC, 0x96ED, 0xE8E0, 0xE8E1, 0x96EE, 0x96EF, 0x96F0, 0xD1F9, 0xBACB, 0xB8F9, 0x96F1, 0x96F2, 0xB8F1, 0xD4D4, 0xE8EF, 0x96F3, 0xE8EE, 0xE8EC, 0xB9F0, 0xCCD2, 0xE8E6, 0xCEA6, 0xBFF2, 0x96F4, 0xB0B8, 0xE8F1, 0xE8F0, 0x96F5, 0xD7C0, 0x96F6, 0xE8E4, 0x96F7, 0xCDA9, 0xC9A3, 0x96F8, 0xBBB8, 0xBDDB, 0xE8EA, 0x96F9, 0x96FA, 0x96FB, 0x96FC, 0x96FD, 0x96FE, 0x9740, 0x9741, 0x9742, 0x9743, 0xE8E2, 0xE8E3, 0xE8E5, 0xB5B5, 0xE8E7, 0xC7C5, 0xE8EB, 0xE8ED, 0xBDB0, 0xD7AE, 0x9744, 0xE8F8, 0x9745, 0x9746, 0x9747, 0x9748, 0x9749, 0x974A, 0x974B, 0x974C, 0xE8F5, 0x974D, 0xCDB0, 0xE8F6, 0x974E, 0x974F, 0x9750, 0x9751, 0x9752, 0x9753, 0x9754, 0x9755, 0x9756, 0xC1BA, 0x9757, 0xE8E8, 0x9758, 0xC3B7, 0xB0F0, 0x9759, 0x975A, 0x975B, 0x975C, 0x975D, 0x975E, 0x975F, 0x9760, 0xE8F4, 0x9761, 0x9762, 0x9763, 0xE8F7, 0x9764, 0x9765, 0x9766, 0xB9A3, 0x9767, 0x9768, 0x9769, 0x976A, 0x976B, 0x976C, 0x976D, 0x976E, 0x976F, 0x9770, 0xC9D2, 0x9771, 0x9772, 0x9773, 0xC3CE, 0xCEE0, 0xC0E6, 0x9774, 0x9775, 0x9776, 0x9777, 0xCBF3, 0x9778, 0xCCDD, 0xD0B5, 0x9779, 0x977A, 0xCAE1, 0x977B, 0xE8F3, 0x977C, 0x977D, 0x977E, 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, 0x9785, 0x9786, 0xBCEC, 0x9787, 0xE8F9, 0x9788, 0x9789, 0x978A, 0x978B, 0x978C, 0x978D, 0xC3DE, 0x978E, 0xC6E5, 0x978F, 0xB9F7, 0x9790, 0x9791, 0x9792, 0x9793, 0xB0F4, 0x9794, 0x9795, 0xD7D8, 0x9796, 0x9797, 0xBCAC, 0x9798, 0xC5EF, 0x9799, 0x979A, 0x979B, 0x979C, 0x979D, 0xCCC4, 0x979E, 0x979F, 0xE9A6, 0x97A0, 0x97A1, 0x97A2, 0x97A3, 0x97A4, 0x97A5, 0x97A6, 0x97A7, 0x97A8, 0x97A9, 0xC9AD, 0x97AA, 0xE9A2, 0xC0E2, 0x97AB, 0x97AC, 0x97AD, 0xBFC3, 0x97AE, 0x97AF, 0x97B0, 0xE8FE, 0xB9D7, 0x97B1, 0xE8FB, 0x97B2, 0x97B3, 0x97B4, 0x97B5, 0xE9A4, 0x97B6, 0x97B7, 0x97B8, 0xD2CE, 0x97B9, 0x97BA, 0x97BB, 0x97BC, 0x97BD, 0xE9A3, 0x97BE, 0xD6B2, 0xD7B5, 0x97BF, 0xE9A7, 0x97C0, 0xBDB7, 0x97C1, 0x97C2, 0x97C3, 0x97C4, 0x97C5, 0x97C6, 0x97C7, 0x97C8, 0x97C9, 0x97CA, 0x97CB, 0x97CC, 0xE8FC, 0xE8FD, 0x97CD, 0x97CE, 0x97CF, 0xE9A1, 0x97D0, 0x97D1, 0x97D2, 0x97D3, 0x97D4, 0x97D5, 0x97D6, 0x97D7, 0xCDD6, 0x97D8, 0x97D9, 0xD2AC, 0x97DA, 0x97DB, 0x97DC, 0xE9B2, 0x97DD, 0x97DE, 0x97DF, 0x97E0, 0xE9A9, 0x97E1, 0x97E2, 0x97E3, 0xB4AA, 0x97E4, 0xB4BB, 0x97E5, 0x97E6, 0xE9AB, 0x97E7, 0x97E8, 0x97E9, 0x97EA, 0x97EB, 0x97EC, 0x97ED, 0x97EE, 0x97EF, 0x97F0, 0x97F1, 0x97F2, 0x97F3, 0x97F4, 0x97F5, 0x97F6, 0x97F7, 0xD0A8, 0x97F8, 0x97F9, 0xE9A5, 0x97FA, 0x97FB, 0xB3FE, 0x97FC, 0x97FD, 0xE9AC, 0xC0E3, 0x97FE, 0xE9AA, 0x9840, 0x9841, 0xE9B9, 0x9842, 0x9843, 0xE9B8, 0x9844, 0x9845, 0x9846, 0x9847, 0xE9AE, 0x9848, 0x9849, 0xE8FA, 0x984A, 0x984B, 0xE9A8, 0x984C, 0x984D, 0x984E, 0x984F, 0x9850, 0xBFAC, 0xE9B1, 0xE9BA, 0x9851, 0x9852, 0xC2A5, 0x9853, 0x9854, 0x9855, 0xE9AF, 0x9856, 0xB8C5, 0x9857, 0xE9AD, 0x9858, 0xD3DC, 0xE9B4, 0xE9B5, 0xE9B7, 0x9859, 0x985A, 0x985B, 0xE9C7, 0x985C, 0x985D, 0x985E, 0x985F, 0x9860, 0x9861, 0xC0C6, 0xE9C5, 0x9862, 0x9863, 0xE9B0, 0x9864, 0x9865, 0xE9BB, 0xB0F1, 0x9866, 0x9867, 0x9868, 0x9869, 0x986A, 0x986B, 0x986C, 0x986D, 0x986E, 0x986F, 0xE9BC, 0xD5A5, 0x9870, 0x9871, 0xE9BE, 0x9872, 0xE9BF, 0x9873, 0x9874, 0x9875, 0xE9C1, 0x9876, 0x9877, 0xC1F1, 0x9878, 0x9879, 0xC8B6, 0x987A, 0x987B, 0x987C, 0xE9BD, 0x987D, 0x987E, 0x9880, 0x9881, 0x9882, 0xE9C2, 0x9883, 0x9884, 0x9885, 0x9886, 0x9887, 0x9888, 0x9889, 0x988A, 0xE9C3, 0x988B, 0xE9B3, 0x988C, 0xE9B6, 0x988D, 0xBBB1, 0x988E, 0x988F, 0x9890, 0xE9C0, 0x9891, 0x9892, 0x9893, 0x9894, 0x9895, 0x9896, 0xBCF7, 0x9897, 0x9898, 0x9899, 0xE9C4, 0xE9C6, 0x989A, 0x989B, 0x989C, 0x989D, 0x989E, 0x989F, 0x98A0, 0x98A1, 0x98A2, 0x98A3, 0x98A4, 0x98A5, 0xE9CA, 0x98A6, 0x98A7, 0x98A8, 0x98A9, 0xE9CE, 0x98AA, 0x98AB, 0x98AC, 0x98AD, 0x98AE, 0x98AF, 0x98B0, 0x98B1, 0x98B2, 0x98B3, 0xB2DB, 0x98B4, 0xE9C8, 0x98B5, 0x98B6, 0x98B7, 0x98B8, 0x98B9, 0x98BA, 0x98BB, 0x98BC, 0x98BD, 0x98BE, 0xB7AE, 0x98BF, 0x98C0, 0x98C1, 0x98C2, 0x98C3, 0x98C4, 0x98C5, 0x98C6, 0x98C7, 0x98C8, 0x98C9, 0x98CA, 0xE9CB, 0xE9CC, 0x98CB, 0x98CC, 0x98CD, 0x98CE, 0x98CF, 0x98D0, 0xD5C1, 0x98D1, 0xC4A3, 0x98D2, 0x98D3, 0x98D4, 0x98D5, 0x98D6, 0x98D7, 0xE9D8, 0x98D8, 0xBAE1, 0x98D9, 0x98DA, 0x98DB, 0x98DC, 0xE9C9, 0x98DD, 0xD3A3, 0x98DE, 0x98DF, 0x98E0, 0xE9D4, 0x98E1, 0x98E2, 0x98E3, 0x98E4, 0x98E5, 0x98E6, 0x98E7, 0xE9D7, 0xE9D0, 0x98E8, 0x98E9, 0x98EA, 0x98EB, 0x98EC, 0xE9CF, 0x98ED, 0x98EE, 0xC7C1, 0x98EF, 0x98F0, 0x98F1, 0x98F2, 0x98F3, 0x98F4, 0x98F5, 0x98F6, 0xE9D2, 0x98F7, 0x98F8, 0x98F9, 0x98FA, 0x98FB, 0x98FC, 0x98FD, 0xE9D9, 0xB3C8, 0x98FE, 0xE9D3, 0x9940, 0x9941, 0x9942, 0x9943, 0x9944, 0xCFF0, 0x9945, 0x9946, 0x9947, 0xE9CD, 0x9948, 0x9949, 0x994A, 0x994B, 0x994C, 0x994D, 0x994E, 0x994F, 0x9950, 0x9951, 0x9952, 0xB3F7, 0x9953, 0x9954, 0x9955, 0x9956, 0x9957, 0x9958, 0x9959, 0xE9D6, 0x995A, 0x995B, 0xE9DA, 0x995C, 0x995D, 0x995E, 0xCCB4, 0x995F, 0x9960, 0x9961, 0xCFAD, 0x9962, 0x9963, 0x9964, 0x9965, 0x9966, 0x9967, 0x9968, 0x9969, 0x996A, 0xE9D5, 0x996B, 0xE9DC, 0xE9DB, 0x996C, 0x996D, 0x996E, 0x996F, 0x9970, 0xE9DE, 0x9971, 0x9972, 0x9973, 0x9974, 0x9975, 0x9976, 0x9977, 0x9978, 0xE9D1, 0x9979, 0x997A, 0x997B, 0x997C, 0x997D, 0x997E, 0x9980, 0x9981, 0xE9DD, 0x9982, 0xE9DF, 0xC3CA, 0x9983, 0x9984, 0x9985, 0x9986, 0x9987, 0x9988, 0x9989, 0x998A, 0x998B, 0x998C, 0x998D, 0x998E, 0x998F, 0x9990, 0x9991, 0x9992, 0x9993, 0x9994, 0x9995, 0x9996, 0x9997, 0x9998, 0x9999, 0x999A, 0x999B, 0x999C, 0x999D, 0x999E, 0x999F, 0x99A0, 0x99A1, 0x99A2, 0x99A3, 0x99A4, 0x99A5, 0x99A6, 0x99A7, 0x99A8, 0x99A9, 0x99AA, 0x99AB, 0x99AC, 0x99AD, 0x99AE, 0x99AF, 0x99B0, 0x99B1, 0x99B2, 0x99B3, 0x99B4, 0x99B5, 0x99B6, 0x99B7, 0x99B8, 0x99B9, 0x99BA, 0x99BB, 0x99BC, 0x99BD, 0x99BE, 0x99BF, 0x99C0, 0x99C1, 0x99C2, 0x99C3, 0x99C4, 0x99C5, 0x99C6, 0x99C7, 0x99C8, 0x99C9, 0x99CA, 0x99CB, 0x99CC, 0x99CD, 0x99CE, 0x99CF, 0x99D0, 0x99D1, 0x99D2, 0x99D3, 0x99D4, 0x99D5, 0x99D6, 0x99D7, 0x99D8, 0x99D9, 0x99DA, 0x99DB, 0x99DC, 0x99DD, 0x99DE, 0x99DF, 0x99E0, 0x99E1, 0x99E2, 0x99E3, 0x99E4, 0x99E5, 0x99E6, 0x99E7, 0x99E8, 0x99E9, 0x99EA, 0x99EB, 0x99EC, 0x99ED, 0x99EE, 0x99EF, 0x99F0, 0x99F1, 0x99F2, 0x99F3, 0x99F4, 0x99F5, 0xC7B7, 0xB4CE, 0xBBB6, 0xD0C0, 0xECA3, 0x99F6, 0x99F7, 0xC5B7, 0x99F8, 0x99F9, 0x99FA, 0x99FB, 0x99FC, 0x99FD, 0x99FE, 0x9A40, 0x9A41, 0x9A42, 0xD3FB, 0x9A43, 0x9A44, 0x9A45, 0x9A46, 0xECA4, 0x9A47, 0xECA5, 0xC6DB, 0x9A48, 0x9A49, 0x9A4A, 0xBFEE, 0x9A4B, 0x9A4C, 0x9A4D, 0x9A4E, 0xECA6, 0x9A4F, 0x9A50, 0xECA7, 0xD0AA, 0x9A51, 0xC7B8, 0x9A52, 0x9A53, 0xB8E8, 0x9A54, 0x9A55, 0x9A56, 0x9A57, 0x9A58, 0x9A59, 0x9A5A, 0x9A5B, 0x9A5C, 0x9A5D, 0x9A5E, 0x9A5F, 0xECA8, 0x9A60, 0x9A61, 0x9A62, 0x9A63, 0x9A64, 0x9A65, 0x9A66, 0x9A67, 0xD6B9, 0xD5FD, 0xB4CB, 0xB2BD, 0xCEE4, 0xC6E7, 0x9A68, 0x9A69, 0xCDE1, 0x9A6A, 0x9A6B, 0x9A6C, 0x9A6D, 0x9A6E, 0x9A6F, 0x9A70, 0x9A71, 0x9A72, 0x9A73, 0x9A74, 0x9A75, 0x9A76, 0x9A77, 0xB4F5, 0x9A78, 0xCBC0, 0xBCDF, 0x9A79, 0x9A7A, 0x9A7B, 0x9A7C, 0xE9E2, 0xE9E3, 0xD1EA, 0xE9E5, 0x9A7D, 0xB4F9, 0xE9E4, 0x9A7E, 0xD1B3, 0xCAE2, 0xB2D0, 0x9A80, 0xE9E8, 0x9A81, 0x9A82, 0x9A83, 0x9A84, 0xE9E6, 0xE9E7, 0x9A85, 0x9A86, 0xD6B3, 0x9A87, 0x9A88, 0x9A89, 0xE9E9, 0xE9EA, 0x9A8A, 0x9A8B, 0x9A8C, 0x9A8D, 0x9A8E, 0xE9EB, 0x9A8F, 0x9A90, 0x9A91, 0x9A92, 0x9A93, 0x9A94, 0x9A95, 0x9A96, 0xE9EC, 0x9A97, 0x9A98, 0x9A99, 0x9A9A, 0x9A9B, 0x9A9C, 0x9A9D, 0x9A9E, 0xECAF, 0xC5B9, 0xB6CE, 0x9A9F, 0xD2F3, 0x9AA0, 0x9AA1, 0x9AA2, 0x9AA3, 0x9AA4, 0x9AA5, 0x9AA6, 0xB5EE, 0x9AA7, 0xBBD9, 0xECB1, 0x9AA8, 0x9AA9, 0xD2E3, 0x9AAA, 0x9AAB, 0x9AAC, 0x9AAD, 0x9AAE, 0xCEE3, 0x9AAF, 0xC4B8, 0x9AB0, 0xC3BF, 0x9AB1, 0x9AB2, 0xB6BE, 0xD8B9, 0xB1C8, 0xB1CF, 0xB1D1, 0xC5FE, 0x9AB3, 0xB1D0, 0x9AB4, 0xC3AB, 0x9AB5, 0x9AB6, 0x9AB7, 0x9AB8, 0x9AB9, 0xD5B1, 0x9ABA, 0x9ABB, 0x9ABC, 0x9ABD, 0x9ABE, 0x9ABF, 0x9AC0, 0x9AC1, 0xEBA4, 0xBAC1, 0x9AC2, 0x9AC3, 0x9AC4, 0xCCBA, 0x9AC5, 0x9AC6, 0x9AC7, 0xEBA5, 0x9AC8, 0xEBA7, 0x9AC9, 0x9ACA, 0x9ACB, 0xEBA8, 0x9ACC, 0x9ACD, 0x9ACE, 0xEBA6, 0x9ACF, 0x9AD0, 0x9AD1, 0x9AD2, 0x9AD3, 0x9AD4, 0x9AD5, 0xEBA9, 0xEBAB, 0xEBAA, 0x9AD6, 0x9AD7, 0x9AD8, 0x9AD9, 0x9ADA, 0xEBAC, 0x9ADB, 0xCACF, 0xD8B5, 0xC3F1, 0x9ADC, 0xC3A5, 0xC6F8, 0xEBAD, 0xC4CA, 0x9ADD, 0xEBAE, 0xEBAF, 0xEBB0, 0xB7D5, 0x9ADE, 0x9ADF, 0x9AE0, 0xB7FA, 0x9AE1, 0xEBB1, 0xC7E2, 0x9AE2, 0xEBB3, 0x9AE3, 0xBAA4, 0xD1F5, 0xB0B1, 0xEBB2, 0xEBB4, 0x9AE4, 0x9AE5, 0x9AE6, 0xB5AA, 0xC2C8, 0xC7E8, 0x9AE7, 0xEBB5, 0x9AE8, 0xCBAE, 0xE3DF, 0x9AE9, 0x9AEA, 0xD3C0, 0x9AEB, 0x9AEC, 0x9AED, 0x9AEE, 0xD9DB, 0x9AEF, 0x9AF0, 0xCDA1, 0xD6AD, 0xC7F3, 0x9AF1, 0x9AF2, 0x9AF3, 0xD9E0, 0xBBE3, 0x9AF4, 0xBABA, 0xE3E2, 0x9AF5, 0x9AF6, 0x9AF7, 0x9AF8, 0x9AF9, 0xCFAB, 0x9AFA, 0x9AFB, 0x9AFC, 0xE3E0, 0xC9C7, 0x9AFD, 0xBAB9, 0x9AFE, 0x9B40, 0x9B41, 0xD1B4, 0xE3E1, 0xC8EA, 0xB9AF, 0xBDAD, 0xB3D8, 0xCEDB, 0x9B42, 0x9B43, 0xCCC0, 0x9B44, 0x9B45, 0x9B46, 0xE3E8, 0xE3E9, 0xCDF4, 0x9B47, 0x9B48, 0x9B49, 0x9B4A, 0x9B4B, 0xCCAD, 0x9B4C, 0xBCB3, 0x9B4D, 0xE3EA, 0x9B4E, 0xE3EB, 0x9B4F, 0x9B50, 0xD0DA, 0x9B51, 0x9B52, 0x9B53, 0xC6FB, 0xB7DA, 0x9B54, 0x9B55, 0xC7DF, 0xD2CA, 0xCED6, 0x9B56, 0xE3E4, 0xE3EC, 0x9B57, 0xC9F2, 0xB3C1, 0x9B58, 0x9B59, 0xE3E7, 0x9B5A, 0x9B5B, 0xC6E3, 0xE3E5, 0x9B5C, 0x9B5D, 0xEDB3, 0xE3E6, 0x9B5E, 0x9B5F, 0x9B60, 0x9B61, 0xC9B3, 0x9B62, 0xC5E6, 0x9B63, 0x9B64, 0x9B65, 0xB9B5, 0x9B66, 0xC3BB, 0x9B67, 0xE3E3, 0xC5BD, 0xC1A4, 0xC2D9, 0xB2D7, 0x9B68, 0xE3ED, 0xBBA6, 0xC4AD, 0x9B69, 0xE3F0, 0xBEDA, 0x9B6A, 0x9B6B, 0xE3FB, 0xE3F5, 0xBAD3, 0x9B6C, 0x9B6D, 0x9B6E, 0x9B6F, 0xB7D0, 0xD3CD, 0x9B70, 0xD6CE, 0xD5D3, 0xB9C1, 0xD5B4, 0xD1D8, 0x9B71, 0x9B72, 0x9B73, 0x9B74, 0xD0B9, 0xC7F6, 0x9B75, 0x9B76, 0x9B77, 0xC8AA, 0xB2B4, 0x9B78, 0xC3DA, 0x9B79, 0x9B7A, 0x9B7B, 0xE3EE, 0x9B7C, 0x9B7D, 0xE3FC, 0xE3EF, 0xB7A8, 0xE3F7, 0xE3F4, 0x9B7E, 0x9B80, 0x9B81, 0xB7BA, 0x9B82, 0x9B83, 0xC5A2, 0x9B84, 0xE3F6, 0xC5DD, 0xB2A8, 0xC6FC, 0x9B85, 0xC4E0, 0x9B86, 0x9B87, 0xD7A2, 0x9B88, 0xC0E1, 0xE3F9, 0x9B89, 0x9B8A, 0xE3FA, 0xE3FD, 0xCCA9, 0xE3F3, 0x9B8B, 0xD3BE, 0x9B8C, 0xB1C3, 0xEDB4, 0xE3F1, 0xE3F2, 0x9B8D, 0xE3F8, 0xD0BA, 0xC6C3, 0xD4F3, 0xE3FE, 0x9B8E, 0x9B8F, 0xBDE0, 0x9B90, 0x9B91, 0xE4A7, 0x9B92, 0x9B93, 0xE4A6, 0x9B94, 0x9B95, 0x9B96, 0xD1F3, 0xE4A3, 0x9B97, 0xE4A9, 0x9B98, 0x9B99, 0x9B9A, 0xC8F7, 0x9B9B, 0x9B9C, 0x9B9D, 0x9B9E, 0xCFB4, 0x9B9F, 0xE4A8, 0xE4AE, 0xC2E5, 0x9BA0, 0x9BA1, 0xB6B4, 0x9BA2, 0x9BA3, 0x9BA4, 0x9BA5, 0x9BA6, 0x9BA7, 0xBDF2, 0x9BA8, 0xE4A2, 0x9BA9, 0x9BAA, 0xBAE9, 0xE4AA, 0x9BAB, 0x9BAC, 0xE4AC, 0x9BAD, 0x9BAE, 0xB6FD, 0xD6DE, 0xE4B2, 0x9BAF, 0xE4AD, 0x9BB0, 0x9BB1, 0x9BB2, 0xE4A1, 0x9BB3, 0xBBEE, 0xCDDD, 0xC7A2, 0xC5C9, 0x9BB4, 0x9BB5, 0xC1F7, 0x9BB6, 0xE4A4, 0x9BB7, 0xC7B3, 0xBDAC, 0xBDBD, 0xE4A5, 0x9BB8, 0xD7C7, 0xB2E2, 0x9BB9, 0xE4AB, 0xBCC3, 0xE4AF, 0x9BBA, 0xBBEB, 0xE4B0, 0xC5A8, 0xE4B1, 0x9BBB, 0x9BBC, 0x9BBD, 0x9BBE, 0xD5E3, 0xBFA3, 0x9BBF, 0xE4BA, 0x9BC0, 0xE4B7, 0x9BC1, 0xE4BB, 0x9BC2, 0x9BC3, 0xE4BD, 0x9BC4, 0x9BC5, 0xC6D6, 0x9BC6, 0x9BC7, 0xBAC6, 0xC0CB, 0x9BC8, 0x9BC9, 0x9BCA, 0xB8A1, 0xE4B4, 0x9BCB, 0x9BCC, 0x9BCD, 0x9BCE, 0xD4A1, 0x9BCF, 0x9BD0, 0xBAA3, 0xBDFE, 0x9BD1, 0x9BD2, 0x9BD3, 0xE4BC, 0x9BD4, 0x9BD5, 0x9BD6, 0x9BD7, 0x9BD8, 0xCDBF, 0x9BD9, 0x9BDA, 0xC4F9, 0x9BDB, 0x9BDC, 0xCFFB, 0xC9E6, 0x9BDD, 0x9BDE, 0xD3BF, 0x9BDF, 0xCFD1, 0x9BE0, 0x9BE1, 0xE4B3, 0x9BE2, 0xE4B8, 0xE4B9, 0xCCE9, 0x9BE3, 0x9BE4, 0x9BE5, 0x9BE6, 0x9BE7, 0xCCCE, 0x9BE8, 0xC0D4, 0xE4B5, 0xC1B0, 0xE4B6, 0xCED0, 0x9BE9, 0xBBC1, 0xB5D3, 0x9BEA, 0xC8F3, 0xBDA7, 0xD5C7, 0xC9AC, 0xB8A2, 0xE4CA, 0x9BEB, 0x9BEC, 0xE4CC, 0xD1C4, 0x9BED, 0x9BEE, 0xD2BA, 0x9BEF, 0x9BF0, 0xBAAD, 0x9BF1, 0x9BF2, 0xBAD4, 0x9BF3, 0x9BF4, 0x9BF5, 0x9BF6, 0x9BF7, 0x9BF8, 0xE4C3, 0xB5ED, 0x9BF9, 0x9BFA, 0x9BFB, 0xD7CD, 0xE4C0, 0xCFFD, 0xE4BF, 0x9BFC, 0x9BFD, 0x9BFE, 0xC1DC, 0xCCCA, 0x9C40, 0x9C41, 0x9C42, 0x9C43, 0xCAE7, 0x9C44, 0x9C45, 0x9C46, 0x9C47, 0xC4D7, 0x9C48, 0xCCD4, 0xE4C8, 0x9C49, 0x9C4A, 0x9C4B, 0xE4C7, 0xE4C1, 0x9C4C, 0xE4C4, 0xB5AD, 0x9C4D, 0x9C4E, 0xD3D9, 0x9C4F, 0xE4C6, 0x9C50, 0x9C51, 0x9C52, 0x9C53, 0xD2F9, 0xB4E3, 0x9C54, 0xBBB4, 0x9C55, 0x9C56, 0xC9EE, 0x9C57, 0xB4BE, 0x9C58, 0x9C59, 0x9C5A, 0xBBEC, 0x9C5B, 0xD1CD, 0x9C5C, 0xCCED, 0xEDB5, 0x9C5D, 0x9C5E, 0x9C5F, 0x9C60, 0x9C61, 0x9C62, 0x9C63, 0x9C64, 0xC7E5, 0x9C65, 0x9C66, 0x9C67, 0x9C68, 0xD4A8, 0x9C69, 0xE4CB, 0xD7D5, 0xE4C2, 0x9C6A, 0xBDA5, 0xE4C5, 0x9C6B, 0x9C6C, 0xD3E6, 0x9C6D, 0xE4C9, 0xC9F8, 0x9C6E, 0x9C6F, 0xE4BE, 0x9C70, 0x9C71, 0xD3E5, 0x9C72, 0x9C73, 0xC7FE, 0xB6C9, 0x9C74, 0xD4FC, 0xB2B3, 0xE4D7, 0x9C75, 0x9C76, 0x9C77, 0xCEC2, 0x9C78, 0xE4CD, 0x9C79, 0xCEBC, 0x9C7A, 0xB8DB, 0x9C7B, 0x9C7C, 0xE4D6, 0x9C7D, 0xBFCA, 0x9C7E, 0x9C80, 0x9C81, 0xD3CE, 0x9C82, 0xC3EC, 0x9C83, 0x9C84, 0x9C85, 0x9C86, 0x9C87, 0x9C88, 0x9C89, 0x9C8A, 0xC5C8, 0xE4D8, 0x9C8B, 0x9C8C, 0x9C8D, 0x9C8E, 0x9C8F, 0x9C90, 0x9C91, 0x9C92, 0xCDC4, 0xE4CF, 0x9C93, 0x9C94, 0x9C95, 0x9C96, 0xE4D4, 0xE4D5, 0x9C97, 0xBAFE, 0x9C98, 0xCFE6, 0x9C99, 0x9C9A, 0xD5BF, 0x9C9B, 0x9C9C, 0x9C9D, 0xE4D2, 0x9C9E, 0x9C9F, 0x9CA0, 0x9CA1, 0x9CA2, 0x9CA3, 0x9CA4, 0x9CA5, 0x9CA6, 0x9CA7, 0x9CA8, 0xE4D0, 0x9CA9, 0x9CAA, 0xE4CE, 0x9CAB, 0x9CAC, 0x9CAD, 0x9CAE, 0x9CAF, 0x9CB0, 0x9CB1, 0x9CB2, 0x9CB3, 0x9CB4, 0x9CB5, 0x9CB6, 0x9CB7, 0x9CB8, 0x9CB9, 0xCDE5, 0xCAAA, 0x9CBA, 0x9CBB, 0x9CBC, 0xC0A3, 0x9CBD, 0xBDA6, 0xE4D3, 0x9CBE, 0x9CBF, 0xB8C8, 0x9CC0, 0x9CC1, 0x9CC2, 0x9CC3, 0x9CC4, 0xE4E7, 0xD4B4, 0x9CC5, 0x9CC6, 0x9CC7, 0x9CC8, 0x9CC9, 0x9CCA, 0x9CCB, 0xE4DB, 0x9CCC, 0x9CCD, 0x9CCE, 0xC1EF, 0x9CCF, 0x9CD0, 0xE4E9, 0x9CD1, 0x9CD2, 0xD2E7, 0x9CD3, 0x9CD4, 0xE4DF, 0x9CD5, 0xE4E0, 0x9CD6, 0x9CD7, 0xCFAA, 0x9CD8, 0x9CD9, 0x9CDA, 0x9CDB, 0xCBDD, 0x9CDC, 0xE4DA, 0xE4D1, 0x9CDD, 0xE4E5, 0x9CDE, 0xC8DC, 0xE4E3, 0x9CDF, 0x9CE0, 0xC4E7, 0xE4E2, 0x9CE1, 0xE4E1, 0x9CE2, 0x9CE3, 0x9CE4, 0xB3FC, 0xE4E8, 0x9CE5, 0x9CE6, 0x9CE7, 0x9CE8, 0xB5E1, 0x9CE9, 0x9CEA, 0x9CEB, 0xD7CC, 0x9CEC, 0x9CED, 0x9CEE, 0xE4E6, 0x9CEF, 0xBBAC, 0x9CF0, 0xD7D2, 0xCCCF, 0xEBF8, 0x9CF1, 0xE4E4, 0x9CF2, 0x9CF3, 0xB9F6, 0x9CF4, 0x9CF5, 0x9CF6, 0xD6CD, 0xE4D9, 0xE4DC, 0xC2FA, 0xE4DE, 0x9CF7, 0xC2CB, 0xC0C4, 0xC2D0, 0x9CF8, 0xB1F5, 0xCCB2, 0x9CF9, 0x9CFA, 0x9CFB, 0x9CFC, 0x9CFD, 0x9CFE, 0x9D40, 0x9D41, 0x9D42, 0x9D43, 0xB5CE, 0x9D44, 0x9D45, 0x9D46, 0x9D47, 0xE4EF, 0x9D48, 0x9D49, 0x9D4A, 0x9D4B, 0x9D4C, 0x9D4D, 0x9D4E, 0x9D4F, 0xC6AF, 0x9D50, 0x9D51, 0x9D52, 0xC6E1, 0x9D53, 0x9D54, 0xE4F5, 0x9D55, 0x9D56, 0x9D57, 0x9D58, 0x9D59, 0xC2A9, 0x9D5A, 0x9D5B, 0x9D5C, 0xC0EC, 0xD1DD, 0xE4EE, 0x9D5D, 0x9D5E, 0x9D5F, 0x9D60, 0x9D61, 0x9D62, 0x9D63, 0x9D64, 0x9D65, 0x9D66, 0xC4AE, 0x9D67, 0x9D68, 0x9D69, 0xE4ED, 0x9D6A, 0x9D6B, 0x9D6C, 0x9D6D, 0xE4F6, 0xE4F4, 0xC2FE, 0x9D6E, 0xE4DD, 0x9D6F, 0xE4F0, 0x9D70, 0xCAFE, 0x9D71, 0xD5C4, 0x9D72, 0x9D73, 0xE4F1, 0x9D74, 0x9D75, 0x9D76, 0x9D77, 0x9D78, 0x9D79, 0x9D7A, 0xD1FA, 0x9D7B, 0x9D7C, 0x9D7D, 0x9D7E, 0x9D80, 0x9D81, 0x9D82, 0xE4EB, 0xE4EC, 0x9D83, 0x9D84, 0x9D85, 0xE4F2, 0x9D86, 0xCEAB, 0x9D87, 0x9D88, 0x9D89, 0x9D8A, 0x9D8B, 0x9D8C, 0x9D8D, 0x9D8E, 0x9D8F, 0x9D90, 0xC5CB, 0x9D91, 0x9D92, 0x9D93, 0xC7B1, 0x9D94, 0xC2BA, 0x9D95, 0x9D96, 0x9D97, 0xE4EA, 0x9D98, 0x9D99, 0x9D9A, 0xC1CA, 0x9D9B, 0x9D9C, 0x9D9D, 0x9D9E, 0x9D9F, 0x9DA0, 0xCCB6, 0xB3B1, 0x9DA1, 0x9DA2, 0x9DA3, 0xE4FB, 0x9DA4, 0xE4F3, 0x9DA5, 0x9DA6, 0x9DA7, 0xE4FA, 0x9DA8, 0xE4FD, 0x9DA9, 0xE4FC, 0x9DAA, 0x9DAB, 0x9DAC, 0x9DAD, 0x9DAE, 0x9DAF, 0x9DB0, 0xB3CE, 0x9DB1, 0x9DB2, 0x9DB3, 0xB3BA, 0xE4F7, 0x9DB4, 0x9DB5, 0xE4F9, 0xE4F8, 0xC5EC, 0x9DB6, 0x9DB7, 0x9DB8, 0x9DB9, 0x9DBA, 0x9DBB, 0x9DBC, 0x9DBD, 0x9DBE, 0x9DBF, 0x9DC0, 0x9DC1, 0x9DC2, 0xC0BD, 0x9DC3, 0x9DC4, 0x9DC5, 0x9DC6, 0xD4E8, 0x9DC7, 0x9DC8, 0x9DC9, 0x9DCA, 0x9DCB, 0xE5A2, 0x9DCC, 0x9DCD, 0x9DCE, 0x9DCF, 0x9DD0, 0x9DD1, 0x9DD2, 0x9DD3, 0x9DD4, 0x9DD5, 0x9DD6, 0xB0C4, 0x9DD7, 0x9DD8, 0xE5A4, 0x9DD9, 0x9DDA, 0xE5A3, 0x9DDB, 0x9DDC, 0x9DDD, 0x9DDE, 0x9DDF, 0x9DE0, 0xBCA4, 0x9DE1, 0xE5A5, 0x9DE2, 0x9DE3, 0x9DE4, 0x9DE5, 0x9DE6, 0x9DE7, 0xE5A1, 0x9DE8, 0x9DE9, 0x9DEA, 0x9DEB, 0x9DEC, 0x9DED, 0x9DEE, 0xE4FE, 0xB1F4, 0x9DEF, 0x9DF0, 0x9DF1, 0x9DF2, 0x9DF3, 0x9DF4, 0x9DF5, 0x9DF6, 0x9DF7, 0x9DF8, 0x9DF9, 0xE5A8, 0x9DFA, 0xE5A9, 0xE5A6, 0x9DFB, 0x9DFC, 0x9DFD, 0x9DFE, 0x9E40, 0x9E41, 0x9E42, 0x9E43, 0x9E44, 0x9E45, 0x9E46, 0x9E47, 0xE5A7, 0xE5AA, 0x9E48, 0x9E49, 0x9E4A, 0x9E4B, 0x9E4C, 0x9E4D, 0x9E4E, 0x9E4F, 0x9E50, 0x9E51, 0x9E52, 0x9E53, 0x9E54, 0x9E55, 0x9E56, 0x9E57, 0x9E58, 0x9E59, 0x9E5A, 0x9E5B, 0x9E5C, 0x9E5D, 0x9E5E, 0x9E5F, 0x9E60, 0x9E61, 0x9E62, 0x9E63, 0x9E64, 0x9E65, 0x9E66, 0x9E67, 0x9E68, 0xC6D9, 0x9E69, 0x9E6A, 0x9E6B, 0x9E6C, 0x9E6D, 0x9E6E, 0x9E6F, 0x9E70, 0xE5AB, 0xE5AD, 0x9E71, 0x9E72, 0x9E73, 0x9E74, 0x9E75, 0x9E76, 0x9E77, 0xE5AC, 0x9E78, 0x9E79, 0x9E7A, 0x9E7B, 0x9E7C, 0x9E7D, 0x9E7E, 0x9E80, 0x9E81, 0x9E82, 0x9E83, 0x9E84, 0x9E85, 0x9E86, 0x9E87, 0x9E88, 0x9E89, 0xE5AF, 0x9E8A, 0x9E8B, 0x9E8C, 0xE5AE, 0x9E8D, 0x9E8E, 0x9E8F, 0x9E90, 0x9E91, 0x9E92, 0x9E93, 0x9E94, 0x9E95, 0x9E96, 0x9E97, 0x9E98, 0x9E99, 0x9E9A, 0x9E9B, 0x9E9C, 0x9E9D, 0x9E9E, 0xB9E0, 0x9E9F, 0x9EA0, 0xE5B0, 0x9EA1, 0x9EA2, 0x9EA3, 0x9EA4, 0x9EA5, 0x9EA6, 0x9EA7, 0x9EA8, 0x9EA9, 0x9EAA, 0x9EAB, 0x9EAC, 0x9EAD, 0x9EAE, 0xE5B1, 0x9EAF, 0x9EB0, 0x9EB1, 0x9EB2, 0x9EB3, 0x9EB4, 0x9EB5, 0x9EB6, 0x9EB7, 0x9EB8, 0x9EB9, 0x9EBA, 0xBBF0, 0xECE1, 0xC3F0, 0x9EBB, 0xB5C6, 0xBBD2, 0x9EBC, 0x9EBD, 0x9EBE, 0x9EBF, 0xC1E9, 0xD4EE, 0x9EC0, 0xBEC4, 0x9EC1, 0x9EC2, 0x9EC3, 0xD7C6, 0x9EC4, 0xD4D6, 0xB2D3, 0xECBE, 0x9EC5, 0x9EC6, 0x9EC7, 0x9EC8, 0xEAC1, 0x9EC9, 0x9ECA, 0x9ECB, 0xC2AF, 0xB4B6, 0x9ECC, 0x9ECD, 0x9ECE, 0xD1D7, 0x9ECF, 0x9ED0, 0x9ED1, 0xB3B4, 0x9ED2, 0xC8B2, 0xBFBB, 0xECC0, 0x9ED3, 0x9ED4, 0xD6CB, 0x9ED5, 0x9ED6, 0xECBF, 0xECC1, 0x9ED7, 0x9ED8, 0x9ED9, 0x9EDA, 0x9EDB, 0x9EDC, 0x9EDD, 0x9EDE, 0x9EDF, 0x9EE0, 0x9EE1, 0x9EE2, 0x9EE3, 0xECC5, 0xBEE6, 0xCCBF, 0xC5DA, 0xBEBC, 0x9EE4, 0xECC6, 0x9EE5, 0xB1FE, 0x9EE6, 0x9EE7, 0x9EE8, 0xECC4, 0xD5A8, 0xB5E3, 0x9EE9, 0xECC2, 0xC1B6, 0xB3E3, 0x9EEA, 0x9EEB, 0xECC3, 0xCBB8, 0xC0C3, 0xCCFE, 0x9EEC, 0x9EED, 0x9EEE, 0x9EEF, 0xC1D2, 0x9EF0, 0xECC8, 0x9EF1, 0x9EF2, 0x9EF3, 0x9EF4, 0x9EF5, 0x9EF6, 0x9EF7, 0x9EF8, 0x9EF9, 0x9EFA, 0x9EFB, 0x9EFC, 0x9EFD, 0xBAE6, 0xC0D3, 0x9EFE, 0xD6F2, 0x9F40, 0x9F41, 0x9F42, 0xD1CC, 0x9F43, 0x9F44, 0x9F45, 0x9F46, 0xBFBE, 0x9F47, 0xB7B3, 0xC9D5, 0xECC7, 0xBBE2, 0x9F48, 0xCCCC, 0xBDFD, 0xC8C8, 0x9F49, 0xCFA9, 0x9F4A, 0x9F4B, 0x9F4C, 0x9F4D, 0x9F4E, 0x9F4F, 0x9F50, 0xCDE9, 0x9F51, 0xC5EB, 0x9F52, 0x9F53, 0x9F54, 0xB7E9, 0x9F55, 0x9F56, 0x9F57, 0x9F58, 0x9F59, 0x9F5A, 0x9F5B, 0x9F5C, 0x9F5D, 0x9F5E, 0x9F5F, 0xD1C9, 0xBAB8, 0x9F60, 0x9F61, 0x9F62, 0x9F63, 0x9F64, 0xECC9, 0x9F65, 0x9F66, 0xECCA, 0x9F67, 0xBBC0, 0xECCB, 0x9F68, 0xECE2, 0xB1BA, 0xB7D9, 0x9F69, 0x9F6A, 0x9F6B, 0x9F6C, 0x9F6D, 0x9F6E, 0x9F6F, 0x9F70, 0x9F71, 0x9F72, 0x9F73, 0xBDB9, 0x9F74, 0x9F75, 0x9F76, 0x9F77, 0x9F78, 0x9F79, 0x9F7A, 0x9F7B, 0xECCC, 0xD1E6, 0xECCD, 0x9F7C, 0x9F7D, 0x9F7E, 0x9F80, 0xC8BB, 0x9F81, 0x9F82, 0x9F83, 0x9F84, 0x9F85, 0x9F86, 0x9F87, 0x9F88, 0x9F89, 0x9F8A, 0x9F8B, 0x9F8C, 0x9F8D, 0x9F8E, 0xECD1, 0x9F8F, 0x9F90, 0x9F91, 0x9F92, 0xECD3, 0x9F93, 0xBBCD, 0x9F94, 0xBCE5, 0x9F95, 0x9F96, 0x9F97, 0x9F98, 0x9F99, 0x9F9A, 0x9F9B, 0x9F9C, 0x9F9D, 0x9F9E, 0x9F9F, 0x9FA0, 0x9FA1, 0xECCF, 0x9FA2, 0xC9B7, 0x9FA3, 0x9FA4, 0x9FA5, 0x9FA6, 0x9FA7, 0xC3BA, 0x9FA8, 0xECE3, 0xD5D5, 0xECD0, 0x9FA9, 0x9FAA, 0x9FAB, 0x9FAC, 0x9FAD, 0xD6F3, 0x9FAE, 0x9FAF, 0x9FB0, 0xECD2, 0xECCE, 0x9FB1, 0x9FB2, 0x9FB3, 0x9FB4, 0xECD4, 0x9FB5, 0xECD5, 0x9FB6, 0x9FB7, 0xC9BF, 0x9FB8, 0x9FB9, 0x9FBA, 0x9FBB, 0x9FBC, 0x9FBD, 0xCFA8, 0x9FBE, 0x9FBF, 0x9FC0, 0x9FC1, 0x9FC2, 0xD0DC, 0x9FC3, 0x9FC4, 0x9FC5, 0x9FC6, 0xD1AC, 0x9FC7, 0x9FC8, 0x9FC9, 0x9FCA, 0xC8DB, 0x9FCB, 0x9FCC, 0x9FCD, 0xECD6, 0xCEF5, 0x9FCE, 0x9FCF, 0x9FD0, 0x9FD1, 0x9FD2, 0xCAEC, 0xECDA, 0x9FD3, 0x9FD4, 0x9FD5, 0x9FD6, 0x9FD7, 0x9FD8, 0x9FD9, 0xECD9, 0x9FDA, 0x9FDB, 0x9FDC, 0xB0BE, 0x9FDD, 0x9FDE, 0x9FDF, 0x9FE0, 0x9FE1, 0x9FE2, 0xECD7, 0x9FE3, 0xECD8, 0x9FE4, 0x9FE5, 0x9FE6, 0xECE4, 0x9FE7, 0x9FE8, 0x9FE9, 0x9FEA, 0x9FEB, 0x9FEC, 0x9FED, 0x9FEE, 0x9FEF, 0xC8BC, 0x9FF0, 0x9FF1, 0x9FF2, 0x9FF3, 0x9FF4, 0x9FF5, 0x9FF6, 0x9FF7, 0x9FF8, 0x9FF9, 0xC1C7, 0x9FFA, 0x9FFB, 0x9FFC, 0x9FFD, 0x9FFE, 0xECDC, 0xD1E0, 0xA040, 0xA041, 0xA042, 0xA043, 0xA044, 0xA045, 0xA046, 0xA047, 0xA048, 0xA049, 0xECDB, 0xA04A, 0xA04B, 0xA04C, 0xA04D, 0xD4EF, 0xA04E, 0xECDD, 0xA04F, 0xA050, 0xA051, 0xA052, 0xA053, 0xA054, 0xDBC6, 0xA055, 0xA056, 0xA057, 0xA058, 0xA059, 0xA05A, 0xA05B, 0xA05C, 0xA05D, 0xA05E, 0xECDE, 0xA05F, 0xA060, 0xA061, 0xA062, 0xA063, 0xA064, 0xA065, 0xA066, 0xA067, 0xA068, 0xA069, 0xA06A, 0xB1AC, 0xA06B, 0xA06C, 0xA06D, 0xA06E, 0xA06F, 0xA070, 0xA071, 0xA072, 0xA073, 0xA074, 0xA075, 0xA076, 0xA077, 0xA078, 0xA079, 0xA07A, 0xA07B, 0xA07C, 0xA07D, 0xA07E, 0xA080, 0xA081, 0xECDF, 0xA082, 0xA083, 0xA084, 0xA085, 0xA086, 0xA087, 0xA088, 0xA089, 0xA08A, 0xA08B, 0xECE0, 0xA08C, 0xD7A6, 0xA08D, 0xC5C0, 0xA08E, 0xA08F, 0xA090, 0xEBBC, 0xB0AE, 0xA091, 0xA092, 0xA093, 0xBEF4, 0xB8B8, 0xD2AF, 0xB0D6, 0xB5F9, 0xA094, 0xD8B3, 0xA095, 0xCBAC, 0xA096, 0xE3DD, 0xA097, 0xA098, 0xA099, 0xA09A, 0xA09B, 0xA09C, 0xA09D, 0xC6AC, 0xB0E6, 0xA09E, 0xA09F, 0xA0A0, 0xC5C6, 0xEBB9, 0xA0A1, 0xA0A2, 0xA0A3, 0xA0A4, 0xEBBA, 0xA0A5, 0xA0A6, 0xA0A7, 0xEBBB, 0xA0A8, 0xA0A9, 0xD1C0, 0xA0AA, 0xC5A3, 0xA0AB, 0xEAF2, 0xA0AC, 0xC4B2, 0xA0AD, 0xC4B5, 0xC0CE, 0xA0AE, 0xA0AF, 0xA0B0, 0xEAF3, 0xC4C1, 0xA0B1, 0xCEEF, 0xA0B2, 0xA0B3, 0xA0B4, 0xA0B5, 0xEAF0, 0xEAF4, 0xA0B6, 0xA0B7, 0xC9FC, 0xA0B8, 0xA0B9, 0xC7A3, 0xA0BA, 0xA0BB, 0xA0BC, 0xCCD8, 0xCEFE, 0xA0BD, 0xA0BE, 0xA0BF, 0xEAF5, 0xEAF6, 0xCFAC, 0xC0E7, 0xA0C0, 0xA0C1, 0xEAF7, 0xA0C2, 0xA0C3, 0xA0C4, 0xA0C5, 0xA0C6, 0xB6BF, 0xEAF8, 0xA0C7, 0xEAF9, 0xA0C8, 0xEAFA, 0xA0C9, 0xA0CA, 0xEAFB, 0xA0CB, 0xA0CC, 0xA0CD, 0xA0CE, 0xA0CF, 0xA0D0, 0xA0D1, 0xA0D2, 0xA0D3, 0xA0D4, 0xA0D5, 0xA0D6, 0xEAF1, 0xA0D7, 0xA0D8, 0xA0D9, 0xA0DA, 0xA0DB, 0xA0DC, 0xA0DD, 0xA0DE, 0xA0DF, 0xA0E0, 0xA0E1, 0xA0E2, 0xC8AE, 0xE1EB, 0xA0E3, 0xB7B8, 0xE1EC, 0xA0E4, 0xA0E5, 0xA0E6, 0xE1ED, 0xA0E7, 0xD7B4, 0xE1EE, 0xE1EF, 0xD3CC, 0xA0E8, 0xA0E9, 0xA0EA, 0xA0EB, 0xA0EC, 0xA0ED, 0xA0EE, 0xE1F1, 0xBFF1, 0xE1F0, 0xB5D2, 0xA0EF, 0xA0F0, 0xA0F1, 0xB1B7, 0xA0F2, 0xA0F3, 0xA0F4, 0xA0F5, 0xE1F3, 0xE1F2, 0xA0F6, 0xBAFC, 0xA0F7, 0xE1F4, 0xA0F8, 0xA0F9, 0xA0FA, 0xA0FB, 0xB9B7, 0xA0FC, 0xBED1, 0xA0FD, 0xA0FE, 0xAA40, 0xAA41, 0xC4FC, 0xAA42, 0xBADD, 0xBDC6, 0xAA43, 0xAA44, 0xAA45, 0xAA46, 0xAA47, 0xAA48, 0xE1F5, 0xE1F7, 0xAA49, 0xAA4A, 0xB6C0, 0xCFC1, 0xCAA8, 0xE1F6, 0xD5F8, 0xD3FC, 0xE1F8, 0xE1FC, 0xE1F9, 0xAA4B, 0xAA4C, 0xE1FA, 0xC0EA, 0xAA4D, 0xE1FE, 0xE2A1, 0xC0C7, 0xAA4E, 0xAA4F, 0xAA50, 0xAA51, 0xE1FB, 0xAA52, 0xE1FD, 0xAA53, 0xAA54, 0xAA55, 0xAA56, 0xAA57, 0xAA58, 0xE2A5, 0xAA59, 0xAA5A, 0xAA5B, 0xC1D4, 0xAA5C, 0xAA5D, 0xAA5E, 0xAA5F, 0xE2A3, 0xAA60, 0xE2A8, 0xB2FE, 0xE2A2, 0xAA61, 0xAA62, 0xAA63, 0xC3CD, 0xB2C2, 0xE2A7, 0xE2A6, 0xAA64, 0xAA65, 0xE2A4, 0xE2A9, 0xAA66, 0xAA67, 0xE2AB, 0xAA68, 0xAA69, 0xAA6A, 0xD0C9, 0xD6ED, 0xC3A8, 0xE2AC, 0xAA6B, 0xCFD7, 0xAA6C, 0xAA6D, 0xE2AE, 0xAA6E, 0xAA6F, 0xBAEF, 0xAA70, 0xAA71, 0xE9E0, 0xE2AD, 0xE2AA, 0xAA72, 0xAA73, 0xAA74, 0xAA75, 0xBBAB, 0xD4B3, 0xAA76, 0xAA77, 0xAA78, 0xAA79, 0xAA7A, 0xAA7B, 0xAA7C, 0xAA7D, 0xAA7E, 0xAA80, 0xAA81, 0xAA82, 0xAA83, 0xE2B0, 0xAA84, 0xAA85, 0xE2AF, 0xAA86, 0xE9E1, 0xAA87, 0xAA88, 0xAA89, 0xAA8A, 0xE2B1, 0xAA8B, 0xAA8C, 0xAA8D, 0xAA8E, 0xAA8F, 0xAA90, 0xAA91, 0xAA92, 0xE2B2, 0xAA93, 0xAA94, 0xAA95, 0xAA96, 0xAA97, 0xAA98, 0xAA99, 0xAA9A, 0xAA9B, 0xAA9C, 0xAA9D, 0xE2B3, 0xCCA1, 0xAA9E, 0xE2B4, 0xAA9F, 0xAAA0, 0xAB40, 0xAB41, 0xAB42, 0xAB43, 0xAB44, 0xAB45, 0xAB46, 0xAB47, 0xAB48, 0xAB49, 0xAB4A, 0xAB4B, 0xE2B5, 0xAB4C, 0xAB4D, 0xAB4E, 0xAB4F, 0xAB50, 0xD0FE, 0xAB51, 0xAB52, 0xC2CA, 0xAB53, 0xD3F1, 0xAB54, 0xCDF5, 0xAB55, 0xAB56, 0xE7E0, 0xAB57, 0xAB58, 0xE7E1, 0xAB59, 0xAB5A, 0xAB5B, 0xAB5C, 0xBEC1, 0xAB5D, 0xAB5E, 0xAB5F, 0xAB60, 0xC2EA, 0xAB61, 0xAB62, 0xAB63, 0xE7E4, 0xAB64, 0xAB65, 0xE7E3, 0xAB66, 0xAB67, 0xAB68, 0xAB69, 0xAB6A, 0xAB6B, 0xCDE6, 0xAB6C, 0xC3B5, 0xAB6D, 0xAB6E, 0xE7E2, 0xBBB7, 0xCFD6, 0xAB6F, 0xC1E1, 0xE7E9, 0xAB70, 0xAB71, 0xAB72, 0xE7E8, 0xAB73, 0xAB74, 0xE7F4, 0xB2A3, 0xAB75, 0xAB76, 0xAB77, 0xAB78, 0xE7EA, 0xAB79, 0xE7E6, 0xAB7A, 0xAB7B, 0xAB7C, 0xAB7D, 0xAB7E, 0xE7EC, 0xE7EB, 0xC9BA, 0xAB80, 0xAB81, 0xD5E4, 0xAB82, 0xE7E5, 0xB7A9, 0xE7E7, 0xAB83, 0xAB84, 0xAB85, 0xAB86, 0xAB87, 0xAB88, 0xAB89, 0xE7EE, 0xAB8A, 0xAB8B, 0xAB8C, 0xAB8D, 0xE7F3, 0xAB8E, 0xD6E9, 0xAB8F, 0xAB90, 0xAB91, 0xAB92, 0xE7ED, 0xAB93, 0xE7F2, 0xAB94, 0xE7F1, 0xAB95, 0xAB96, 0xAB97, 0xB0E0, 0xAB98, 0xAB99, 0xAB9A, 0xAB9B, 0xE7F5, 0xAB9C, 0xAB9D, 0xAB9E, 0xAB9F, 0xABA0, 0xAC40, 0xAC41, 0xAC42, 0xAC43, 0xAC44, 0xAC45, 0xAC46, 0xAC47, 0xAC48, 0xAC49, 0xAC4A, 0xC7F2, 0xAC4B, 0xC0C5, 0xC0ED, 0xAC4C, 0xAC4D, 0xC1F0, 0xE7F0, 0xAC4E, 0xAC4F, 0xAC50, 0xAC51, 0xE7F6, 0xCBF6, 0xAC52, 0xAC53, 0xAC54, 0xAC55, 0xAC56, 0xAC57, 0xAC58, 0xAC59, 0xAC5A, 0xE8A2, 0xE8A1, 0xAC5B, 0xAC5C, 0xAC5D, 0xAC5E, 0xAC5F, 0xAC60, 0xD7C1, 0xAC61, 0xAC62, 0xE7FA, 0xE7F9, 0xAC63, 0xE7FB, 0xAC64, 0xE7F7, 0xAC65, 0xE7FE, 0xAC66, 0xE7FD, 0xAC67, 0xE7FC, 0xAC68, 0xAC69, 0xC1D5, 0xC7D9, 0xC5FD, 0xC5C3, 0xAC6A, 0xAC6B, 0xAC6C, 0xAC6D, 0xAC6E, 0xC7ED, 0xAC6F, 0xAC70, 0xAC71, 0xAC72, 0xE8A3, 0xAC73, 0xAC74, 0xAC75, 0xAC76, 0xAC77, 0xAC78, 0xAC79, 0xAC7A, 0xAC7B, 0xAC7C, 0xAC7D, 0xAC7E, 0xAC80, 0xAC81, 0xAC82, 0xAC83, 0xAC84, 0xAC85, 0xAC86, 0xE8A6, 0xAC87, 0xE8A5, 0xAC88, 0xE8A7, 0xBAF7, 0xE7F8, 0xE8A4, 0xAC89, 0xC8F0, 0xC9AA, 0xAC8A, 0xAC8B, 0xAC8C, 0xAC8D, 0xAC8E, 0xAC8F, 0xAC90, 0xAC91, 0xAC92, 0xAC93, 0xAC94, 0xAC95, 0xAC96, 0xE8A9, 0xAC97, 0xAC98, 0xB9E5, 0xAC99, 0xAC9A, 0xAC9B, 0xAC9C, 0xAC9D, 0xD1FE, 0xE8A8, 0xAC9E, 0xAC9F, 0xACA0, 0xAD40, 0xAD41, 0xAD42, 0xE8AA, 0xAD43, 0xE8AD, 0xE8AE, 0xAD44, 0xC1A7, 0xAD45, 0xAD46, 0xAD47, 0xE8AF, 0xAD48, 0xAD49, 0xAD4A, 0xE8B0, 0xAD4B, 0xAD4C, 0xE8AC, 0xAD4D, 0xE8B4, 0xAD4E, 0xAD4F, 0xAD50, 0xAD51, 0xAD52, 0xAD53, 0xAD54, 0xAD55, 0xAD56, 0xAD57, 0xAD58, 0xE8AB, 0xAD59, 0xE8B1, 0xAD5A, 0xAD5B, 0xAD5C, 0xAD5D, 0xAD5E, 0xAD5F, 0xAD60, 0xAD61, 0xE8B5, 0xE8B2, 0xE8B3, 0xAD62, 0xAD63, 0xAD64, 0xAD65, 0xAD66, 0xAD67, 0xAD68, 0xAD69, 0xAD6A, 0xAD6B, 0xAD6C, 0xAD6D, 0xAD6E, 0xAD6F, 0xAD70, 0xAD71, 0xE8B7, 0xAD72, 0xAD73, 0xAD74, 0xAD75, 0xAD76, 0xAD77, 0xAD78, 0xAD79, 0xAD7A, 0xAD7B, 0xAD7C, 0xAD7D, 0xAD7E, 0xAD80, 0xAD81, 0xAD82, 0xAD83, 0xAD84, 0xAD85, 0xAD86, 0xAD87, 0xAD88, 0xAD89, 0xE8B6, 0xAD8A, 0xAD8B, 0xAD8C, 0xAD8D, 0xAD8E, 0xAD8F, 0xAD90, 0xAD91, 0xAD92, 0xB9CF, 0xAD93, 0xF0AC, 0xAD94, 0xF0AD, 0xAD95, 0xC6B0, 0xB0EA, 0xC8BF, 0xAD96, 0xCDDF, 0xAD97, 0xAD98, 0xAD99, 0xAD9A, 0xAD9B, 0xAD9C, 0xAD9D, 0xCECD, 0xEAB1, 0xAD9E, 0xAD9F, 0xADA0, 0xAE40, 0xEAB2, 0xAE41, 0xC6BF, 0xB4C9, 0xAE42, 0xAE43, 0xAE44, 0xAE45, 0xAE46, 0xAE47, 0xAE48, 0xEAB3, 0xAE49, 0xAE4A, 0xAE4B, 0xAE4C, 0xD5E7, 0xAE4D, 0xAE4E, 0xAE4F, 0xAE50, 0xAE51, 0xAE52, 0xAE53, 0xAE54, 0xDDF9, 0xAE55, 0xEAB4, 0xAE56, 0xEAB5, 0xAE57, 0xEAB6, 0xAE58, 0xAE59, 0xAE5A, 0xAE5B, 0xB8CA, 0xDFB0, 0xC9F5, 0xAE5C, 0xCCF0, 0xAE5D, 0xAE5E, 0xC9FA, 0xAE5F, 0xAE60, 0xAE61, 0xAE62, 0xAE63, 0xC9FB, 0xAE64, 0xAE65, 0xD3C3, 0xCBA6, 0xAE66, 0xB8A6, 0xF0AE, 0xB1C2, 0xAE67, 0xE5B8, 0xCCEF, 0xD3C9, 0xBCD7, 0xC9EA, 0xAE68, 0xB5E7, 0xAE69, 0xC4D0, 0xB5E9, 0xAE6A, 0xEEAE, 0xBBAD, 0xAE6B, 0xAE6C, 0xE7DE, 0xAE6D, 0xEEAF, 0xAE6E, 0xAE6F, 0xAE70, 0xAE71, 0xB3A9, 0xAE72, 0xAE73, 0xEEB2, 0xAE74, 0xAE75, 0xEEB1, 0xBDE7, 0xAE76, 0xEEB0, 0xCEB7, 0xAE77, 0xAE78, 0xAE79, 0xAE7A, 0xC5CF, 0xAE7B, 0xAE7C, 0xAE7D, 0xAE7E, 0xC1F4, 0xDBCE, 0xEEB3, 0xD0F3, 0xAE80, 0xAE81, 0xAE82, 0xAE83, 0xAE84, 0xAE85, 0xAE86, 0xAE87, 0xC2D4, 0xC6E8, 0xAE88, 0xAE89, 0xAE8A, 0xB7AC, 0xAE8B, 0xAE8C, 0xAE8D, 0xAE8E, 0xAE8F, 0xAE90, 0xAE91, 0xEEB4, 0xAE92, 0xB3EB, 0xAE93, 0xAE94, 0xAE95, 0xBBFB, 0xEEB5, 0xAE96, 0xAE97, 0xAE98, 0xAE99, 0xAE9A, 0xE7DC, 0xAE9B, 0xAE9C, 0xAE9D, 0xEEB6, 0xAE9E, 0xAE9F, 0xBDAE, 0xAEA0, 0xAF40, 0xAF41, 0xAF42, 0xF1E2, 0xAF43, 0xAF44, 0xAF45, 0xCAE8, 0xAF46, 0xD2C9, 0xF0DA, 0xAF47, 0xF0DB, 0xAF48, 0xF0DC, 0xC1C6, 0xAF49, 0xB8ED, 0xBECE, 0xAF4A, 0xAF4B, 0xF0DE, 0xAF4C, 0xC5B1, 0xF0DD, 0xD1F1, 0xAF4D, 0xF0E0, 0xB0CC, 0xBDEA, 0xAF4E, 0xAF4F, 0xAF50, 0xAF51, 0xAF52, 0xD2DF, 0xF0DF, 0xAF53, 0xB4AF, 0xB7E8, 0xF0E6, 0xF0E5, 0xC6A3, 0xF0E1, 0xF0E2, 0xB4C3, 0xAF54, 0xAF55, 0xF0E3, 0xD5EE, 0xAF56, 0xAF57, 0xCCDB, 0xBED2, 0xBCB2, 0xAF58, 0xAF59, 0xAF5A, 0xF0E8, 0xF0E7, 0xF0E4, 0xB2A1, 0xAF5B, 0xD6A2, 0xD3B8, 0xBEB7, 0xC8AC, 0xAF5C, 0xAF5D, 0xF0EA, 0xAF5E, 0xAF5F, 0xAF60, 0xAF61, 0xD1F7, 0xAF62, 0xD6CC, 0xBADB, 0xF0E9, 0xAF63, 0xB6BB, 0xAF64, 0xAF65, 0xCDB4, 0xAF66, 0xAF67, 0xC6A6, 0xAF68, 0xAF69, 0xAF6A, 0xC1A1, 0xF0EB, 0xF0EE, 0xAF6B, 0xF0ED, 0xF0F0, 0xF0EC, 0xAF6C, 0xBBBE, 0xF0EF, 0xAF6D, 0xAF6E, 0xAF6F, 0xAF70, 0xCCB5, 0xF0F2, 0xAF71, 0xAF72, 0xB3D5, 0xAF73, 0xAF74, 0xAF75, 0xAF76, 0xB1D4, 0xAF77, 0xAF78, 0xF0F3, 0xAF79, 0xAF7A, 0xF0F4, 0xF0F6, 0xB4E1, 0xAF7B, 0xF0F1, 0xAF7C, 0xF0F7, 0xAF7D, 0xAF7E, 0xAF80, 0xAF81, 0xF0FA, 0xAF82, 0xF0F8, 0xAF83, 0xAF84, 0xAF85, 0xF0F5, 0xAF86, 0xAF87, 0xAF88, 0xAF89, 0xF0FD, 0xAF8A, 0xF0F9, 0xF0FC, 0xF0FE, 0xAF8B, 0xF1A1, 0xAF8C, 0xAF8D, 0xAF8E, 0xCEC1, 0xF1A4, 0xAF8F, 0xF1A3, 0xAF90, 0xC1F6, 0xF0FB, 0xCADD, 0xAF91, 0xAF92, 0xB4F1, 0xB1F1, 0xCCB1, 0xAF93, 0xF1A6, 0xAF94, 0xAF95, 0xF1A7, 0xAF96, 0xAF97, 0xF1AC, 0xD5CE, 0xF1A9, 0xAF98, 0xAF99, 0xC8B3, 0xAF9A, 0xAF9B, 0xAF9C, 0xF1A2, 0xAF9D, 0xF1AB, 0xF1A8, 0xF1A5, 0xAF9E, 0xAF9F, 0xF1AA, 0xAFA0, 0xB040, 0xB041, 0xB042, 0xB043, 0xB044, 0xB045, 0xB046, 0xB0A9, 0xF1AD, 0xB047, 0xB048, 0xB049, 0xB04A, 0xB04B, 0xB04C, 0xF1AF, 0xB04D, 0xF1B1, 0xB04E, 0xB04F, 0xB050, 0xB051, 0xB052, 0xF1B0, 0xB053, 0xF1AE, 0xB054, 0xB055, 0xB056, 0xB057, 0xD1A2, 0xB058, 0xB059, 0xB05A, 0xB05B, 0xB05C, 0xB05D, 0xB05E, 0xF1B2, 0xB05F, 0xB060, 0xB061, 0xF1B3, 0xB062, 0xB063, 0xB064, 0xB065, 0xB066, 0xB067, 0xB068, 0xB069, 0xB9EF, 0xB06A, 0xB06B, 0xB5C7, 0xB06C, 0xB0D7, 0xB0D9, 0xB06D, 0xB06E, 0xB06F, 0xD4ED, 0xB070, 0xB5C4, 0xB071, 0xBDD4, 0xBBCA, 0xF0A7, 0xB072, 0xB073, 0xB8DE, 0xB074, 0xB075, 0xF0A8, 0xB076, 0xB077, 0xB0A8, 0xB078, 0xF0A9, 0xB079, 0xB07A, 0xCDEE, 0xB07B, 0xB07C, 0xF0AA, 0xB07D, 0xB07E, 0xB080, 0xB081, 0xB082, 0xB083, 0xB084, 0xB085, 0xB086, 0xB087, 0xF0AB, 0xB088, 0xB089, 0xB08A, 0xB08B, 0xB08C, 0xB08D, 0xB08E, 0xB08F, 0xB090, 0xC6A4, 0xB091, 0xB092, 0xD6E5, 0xF1E4, 0xB093, 0xF1E5, 0xB094, 0xB095, 0xB096, 0xB097, 0xB098, 0xB099, 0xB09A, 0xB09B, 0xB09C, 0xB09D, 0xC3F3, 0xB09E, 0xB09F, 0xD3DB, 0xB0A0, 0xB140, 0xD6D1, 0xC5E8, 0xB141, 0xD3AF, 0xB142, 0xD2E6, 0xB143, 0xB144, 0xEEC1, 0xB0BB, 0xD5B5, 0xD1CE, 0xBCE0, 0xBAD0, 0xB145, 0xBFF8, 0xB146, 0xB8C7, 0xB5C1, 0xC5CC, 0xB147, 0xB148, 0xCAA2, 0xB149, 0xB14A, 0xB14B, 0xC3CB, 0xB14C, 0xB14D, 0xB14E, 0xB14F, 0xB150, 0xEEC2, 0xB151, 0xB152, 0xB153, 0xB154, 0xB155, 0xB156, 0xB157, 0xB158, 0xC4BF, 0xB6A2, 0xB159, 0xEDEC, 0xC3A4, 0xB15A, 0xD6B1, 0xB15B, 0xB15C, 0xB15D, 0xCFE0, 0xEDEF, 0xB15E, 0xB15F, 0xC5CE, 0xB160, 0xB6DC, 0xB161, 0xB162, 0xCAA1, 0xB163, 0xB164, 0xEDED, 0xB165, 0xB166, 0xEDF0, 0xEDF1, 0xC3BC, 0xB167, 0xBFB4, 0xB168, 0xEDEE, 0xB169, 0xB16A, 0xB16B, 0xB16C, 0xB16D, 0xB16E, 0xB16F, 0xB170, 0xB171, 0xB172, 0xB173, 0xEDF4, 0xEDF2, 0xB174, 0xB175, 0xB176, 0xB177, 0xD5E6, 0xC3DF, 0xB178, 0xEDF3, 0xB179, 0xB17A, 0xB17B, 0xEDF6, 0xB17C, 0xD5A3, 0xD1A3, 0xB17D, 0xB17E, 0xB180, 0xEDF5, 0xB181, 0xC3D0, 0xB182, 0xB183, 0xB184, 0xB185, 0xB186, 0xEDF7, 0xBFF4, 0xBEEC, 0xEDF8, 0xB187, 0xCCF7, 0xB188, 0xD1DB, 0xB189, 0xB18A, 0xB18B, 0xD7C5, 0xD5F6, 0xB18C, 0xEDFC, 0xB18D, 0xB18E, 0xB18F, 0xEDFB, 0xB190, 0xB191, 0xB192, 0xB193, 0xB194, 0xB195, 0xB196, 0xB197, 0xEDF9, 0xEDFA, 0xB198, 0xB199, 0xB19A, 0xB19B, 0xB19C, 0xB19D, 0xB19E, 0xB19F, 0xEDFD, 0xBEA6, 0xB1A0, 0xB240, 0xB241, 0xB242, 0xB243, 0xCBAF, 0xEEA1, 0xB6BD, 0xB244, 0xEEA2, 0xC4C0, 0xB245, 0xEDFE, 0xB246, 0xB247, 0xBDDE, 0xB2C7, 0xB248, 0xB249, 0xB24A, 0xB24B, 0xB24C, 0xB24D, 0xB24E, 0xB24F, 0xB250, 0xB251, 0xB252, 0xB253, 0xB6C3, 0xB254, 0xB255, 0xB256, 0xEEA5, 0xD8BA, 0xEEA3, 0xEEA6, 0xB257, 0xB258, 0xB259, 0xC3E9, 0xB3F2, 0xB25A, 0xB25B, 0xB25C, 0xB25D, 0xB25E, 0xB25F, 0xEEA7, 0xEEA4, 0xCFB9, 0xB260, 0xB261, 0xEEA8, 0xC2F7, 0xB262, 0xB263, 0xB264, 0xB265, 0xB266, 0xB267, 0xB268, 0xB269, 0xB26A, 0xB26B, 0xB26C, 0xB26D, 0xEEA9, 0xEEAA, 0xB26E, 0xDEAB, 0xB26F, 0xB270, 0xC6B3, 0xB271, 0xC7C6, 0xB272, 0xD6F5, 0xB5C9, 0xB273, 0xCBB2, 0xB274, 0xB275, 0xB276, 0xEEAB, 0xB277, 0xB278, 0xCDAB, 0xB279, 0xEEAC, 0xB27A, 0xB27B, 0xB27C, 0xB27D, 0xB27E, 0xD5B0, 0xB280, 0xEEAD, 0xB281, 0xF6C4, 0xB282, 0xB283, 0xB284, 0xB285, 0xB286, 0xB287, 0xB288, 0xB289, 0xB28A, 0xB28B, 0xB28C, 0xB28D, 0xB28E, 0xDBC7, 0xB28F, 0xB290, 0xB291, 0xB292, 0xB293, 0xB294, 0xB295, 0xB296, 0xB297, 0xB4A3, 0xB298, 0xB299, 0xB29A, 0xC3AC, 0xF1E6, 0xB29B, 0xB29C, 0xB29D, 0xB29E, 0xB29F, 0xCAB8, 0xD2D3, 0xB2A0, 0xD6AA, 0xB340, 0xEFF2, 0xB341, 0xBED8, 0xB342, 0xBDC3, 0xEFF3, 0xB6CC, 0xB0AB, 0xB343, 0xB344, 0xB345, 0xB346, 0xCAAF, 0xB347, 0xB348, 0xEDB6, 0xB349, 0xEDB7, 0xB34A, 0xB34B, 0xB34C, 0xB34D, 0xCEF9, 0xB7AF, 0xBFF3, 0xEDB8, 0xC2EB, 0xC9B0, 0xB34E, 0xB34F, 0xB350, 0xB351, 0xB352, 0xB353, 0xEDB9, 0xB354, 0xB355, 0xC6F6, 0xBFB3, 0xB356, 0xB357, 0xB358, 0xEDBC, 0xC5F8, 0xB359, 0xD1D0, 0xB35A, 0xD7A9, 0xEDBA, 0xEDBB, 0xB35B, 0xD1E2, 0xB35C, 0xEDBF, 0xEDC0, 0xB35D, 0xEDC4, 0xB35E, 0xB35F, 0xB360, 0xEDC8, 0xB361, 0xEDC6, 0xEDCE, 0xD5E8, 0xB362, 0xEDC9, 0xB363, 0xB364, 0xEDC7, 0xEDBE, 0xB365, 0xB366, 0xC5E9, 0xB367, 0xB368, 0xB369, 0xC6C6, 0xB36A, 0xB36B, 0xC9E9, 0xD4D2, 0xEDC1, 0xEDC2, 0xEDC3, 0xEDC5, 0xB36C, 0xC0F9, 0xB36D, 0xB4A1, 0xB36E, 0xB36F, 0xB370, 0xB371, 0xB9E8, 0xB372, 0xEDD0, 0xB373, 0xB374, 0xB375, 0xB376, 0xEDD1, 0xB377, 0xEDCA, 0xB378, 0xEDCF, 0xB379, 0xCEF8, 0xB37A, 0xB37B, 0xCBB6, 0xEDCC, 0xEDCD, 0xB37C, 0xB37D, 0xB37E, 0xB380, 0xB381, 0xCFF5, 0xB382, 0xB383, 0xB384, 0xB385, 0xB386, 0xB387, 0xB388, 0xB389, 0xB38A, 0xB38B, 0xB38C, 0xB38D, 0xEDD2, 0xC1F2, 0xD3B2, 0xEDCB, 0xC8B7, 0xB38E, 0xB38F, 0xB390, 0xB391, 0xB392, 0xB393, 0xB394, 0xB395, 0xBCEF, 0xB396, 0xB397, 0xB398, 0xB399, 0xC5F0, 0xB39A, 0xB39B, 0xB39C, 0xB39D, 0xB39E, 0xB39F, 0xB3A0, 0xB440, 0xB441, 0xB442, 0xEDD6, 0xB443, 0xB5EF, 0xB444, 0xB445, 0xC2B5, 0xB0AD, 0xCBE9, 0xB446, 0xB447, 0xB1AE, 0xB448, 0xEDD4, 0xB449, 0xB44A, 0xB44B, 0xCDEB, 0xB5E2, 0xB44C, 0xEDD5, 0xEDD3, 0xEDD7, 0xB44D, 0xB44E, 0xB5FA, 0xB44F, 0xEDD8, 0xB450, 0xEDD9, 0xB451, 0xEDDC, 0xB452, 0xB1CC, 0xB453, 0xB454, 0xB455, 0xB456, 0xB457, 0xB458, 0xB459, 0xB45A, 0xC5F6, 0xBCEE, 0xEDDA, 0xCCBC, 0xB2EA, 0xB45B, 0xB45C, 0xB45D, 0xB45E, 0xEDDB, 0xB45F, 0xB460, 0xB461, 0xB462, 0xC4EB, 0xB463, 0xB464, 0xB4C5, 0xB465, 0xB466, 0xB467, 0xB0F5, 0xB468, 0xB469, 0xB46A, 0xEDDF, 0xC0DA, 0xB4E8, 0xB46B, 0xB46C, 0xB46D, 0xB46E, 0xC5CD, 0xB46F, 0xB470, 0xB471, 0xEDDD, 0xBFC4, 0xB472, 0xB473, 0xB474, 0xEDDE, 0xB475, 0xB476, 0xB477, 0xB478, 0xB479, 0xB47A, 0xB47B, 0xB47C, 0xB47D, 0xB47E, 0xB480, 0xB481, 0xB482, 0xB483, 0xC4A5, 0xB484, 0xB485, 0xB486, 0xEDE0, 0xB487, 0xB488, 0xB489, 0xB48A, 0xB48B, 0xEDE1, 0xB48C, 0xEDE3, 0xB48D, 0xB48E, 0xC1D7, 0xB48F, 0xB490, 0xBBC7, 0xB491, 0xB492, 0xB493, 0xB494, 0xB495, 0xB496, 0xBDB8, 0xB497, 0xB498, 0xB499, 0xEDE2, 0xB49A, 0xB49B, 0xB49C, 0xB49D, 0xB49E, 0xB49F, 0xB4A0, 0xB540, 0xB541, 0xB542, 0xB543, 0xB544, 0xB545, 0xEDE4, 0xB546, 0xB547, 0xB548, 0xB549, 0xB54A, 0xB54B, 0xB54C, 0xB54D, 0xB54E, 0xB54F, 0xEDE6, 0xB550, 0xB551, 0xB552, 0xB553, 0xB554, 0xEDE5, 0xB555, 0xB556, 0xB557, 0xB558, 0xB559, 0xB55A, 0xB55B, 0xB55C, 0xB55D, 0xB55E, 0xB55F, 0xB560, 0xB561, 0xB562, 0xB563, 0xEDE7, 0xB564, 0xB565, 0xB566, 0xB567, 0xB568, 0xCABE, 0xECEA, 0xC0F1, 0xB569, 0xC9E7, 0xB56A, 0xECEB, 0xC6EE, 0xB56B, 0xB56C, 0xB56D, 0xB56E, 0xECEC, 0xB56F, 0xC6ED, 0xECED, 0xB570, 0xB571, 0xB572, 0xB573, 0xB574, 0xB575, 0xB576, 0xB577, 0xB578, 0xECF0, 0xB579, 0xB57A, 0xD7E6, 0xECF3, 0xB57B, 0xB57C, 0xECF1, 0xECEE, 0xECEF, 0xD7A3, 0xC9F1, 0xCBEE, 0xECF4, 0xB57D, 0xECF2, 0xB57E, 0xB580, 0xCFE9, 0xB581, 0xECF6, 0xC6B1, 0xB582, 0xB583, 0xB584, 0xB585, 0xBCC0, 0xB586, 0xECF5, 0xB587, 0xB588, 0xB589, 0xB58A, 0xB58B, 0xB58C, 0xB58D, 0xB5BB, 0xBBF6, 0xB58E, 0xECF7, 0xB58F, 0xB590, 0xB591, 0xB592, 0xB593, 0xD9F7, 0xBDFB, 0xB594, 0xB595, 0xC2BB, 0xECF8, 0xB596, 0xB597, 0xB598, 0xB599, 0xECF9, 0xB59A, 0xB59B, 0xB59C, 0xB59D, 0xB8A3, 0xB59E, 0xB59F, 0xB5A0, 0xB640, 0xB641, 0xB642, 0xB643, 0xB644, 0xB645, 0xB646, 0xECFA, 0xB647, 0xB648, 0xB649, 0xB64A, 0xB64B, 0xB64C, 0xB64D, 0xB64E, 0xB64F, 0xB650, 0xB651, 0xB652, 0xECFB, 0xB653, 0xB654, 0xB655, 0xB656, 0xB657, 0xB658, 0xB659, 0xB65A, 0xB65B, 0xB65C, 0xB65D, 0xECFC, 0xB65E, 0xB65F, 0xB660, 0xB661, 0xB662, 0xD3ED, 0xD8AE, 0xC0EB, 0xB663, 0xC7DD, 0xBACC, 0xB664, 0xD0E3, 0xCBBD, 0xB665, 0xCDBA, 0xB666, 0xB667, 0xB8D1, 0xB668, 0xB669, 0xB1FC, 0xB66A, 0xC7EF, 0xB66B, 0xD6D6, 0xB66C, 0xB66D, 0xB66E, 0xBFC6, 0xC3EB, 0xB66F, 0xB670, 0xEFF5, 0xB671, 0xB672, 0xC3D8, 0xB673, 0xB674, 0xB675, 0xB676, 0xB677, 0xB678, 0xD7E2, 0xB679, 0xB67A, 0xB67B, 0xEFF7, 0xB3D3, 0xB67C, 0xC7D8, 0xD1ED, 0xB67D, 0xD6C8, 0xB67E, 0xEFF8, 0xB680, 0xEFF6, 0xB681, 0xBBFD, 0xB3C6, 0xB682, 0xB683, 0xB684, 0xB685, 0xB686, 0xB687, 0xB688, 0xBDD5, 0xB689, 0xB68A, 0xD2C6, 0xB68B, 0xBBE0, 0xB68C, 0xB68D, 0xCFA1, 0xB68E, 0xEFFC, 0xEFFB, 0xB68F, 0xB690, 0xEFF9, 0xB691, 0xB692, 0xB693, 0xB694, 0xB3CC, 0xB695, 0xC9D4, 0xCBB0, 0xB696, 0xB697, 0xB698, 0xB699, 0xB69A, 0xEFFE, 0xB69B, 0xB69C, 0xB0DE, 0xB69D, 0xB69E, 0xD6C9, 0xB69F, 0xB6A0, 0xB740, 0xEFFD, 0xB741, 0xB3ED, 0xB742, 0xB743, 0xF6D5, 0xB744, 0xB745, 0xB746, 0xB747, 0xB748, 0xB749, 0xB74A, 0xB74B, 0xB74C, 0xB74D, 0xB74E, 0xB74F, 0xB750, 0xB751, 0xB752, 0xCEC8, 0xB753, 0xB754, 0xB755, 0xF0A2, 0xB756, 0xF0A1, 0xB757, 0xB5BE, 0xBCDA, 0xBBFC, 0xB758, 0xB8E5, 0xB759, 0xB75A, 0xB75B, 0xB75C, 0xB75D, 0xB75E, 0xC4C2, 0xB75F, 0xB760, 0xB761, 0xB762, 0xB763, 0xB764, 0xB765, 0xB766, 0xB767, 0xB768, 0xF0A3, 0xB769, 0xB76A, 0xB76B, 0xB76C, 0xB76D, 0xCBEB, 0xB76E, 0xB76F, 0xB770, 0xB771, 0xB772, 0xB773, 0xB774, 0xB775, 0xB776, 0xB777, 0xB778, 0xB779, 0xB77A, 0xB77B, 0xB77C, 0xB77D, 0xB77E, 0xB780, 0xB781, 0xB782, 0xB783, 0xB784, 0xB785, 0xB786, 0xF0A6, 0xB787, 0xB788, 0xB789, 0xD1A8, 0xB78A, 0xBEBF, 0xC7EE, 0xF1B6, 0xF1B7, 0xBFD5, 0xB78B, 0xB78C, 0xB78D, 0xB78E, 0xB4A9, 0xF1B8, 0xCDBB, 0xB78F, 0xC7D4, 0xD5AD, 0xB790, 0xF1B9, 0xB791, 0xF1BA, 0xB792, 0xB793, 0xB794, 0xB795, 0xC7CF, 0xB796, 0xB797, 0xB798, 0xD2A4, 0xD6CF, 0xB799, 0xB79A, 0xF1BB, 0xBDD1, 0xB4B0, 0xBEBD, 0xB79B, 0xB79C, 0xB79D, 0xB4DC, 0xCED1, 0xB79E, 0xBFDF, 0xF1BD, 0xB79F, 0xB7A0, 0xB840, 0xB841, 0xBFFA, 0xF1BC, 0xB842, 0xF1BF, 0xB843, 0xB844, 0xB845, 0xF1BE, 0xF1C0, 0xB846, 0xB847, 0xB848, 0xB849, 0xB84A, 0xF1C1, 0xB84B, 0xB84C, 0xB84D, 0xB84E, 0xB84F, 0xB850, 0xB851, 0xB852, 0xB853, 0xB854, 0xB855, 0xC1FE, 0xB856, 0xB857, 0xB858, 0xB859, 0xB85A, 0xB85B, 0xB85C, 0xB85D, 0xB85E, 0xB85F, 0xB860, 0xC1A2, 0xB861, 0xB862, 0xB863, 0xB864, 0xB865, 0xB866, 0xB867, 0xB868, 0xB869, 0xB86A, 0xCAFA, 0xB86B, 0xB86C, 0xD5BE, 0xB86D, 0xB86E, 0xB86F, 0xB870, 0xBEBA, 0xBEB9, 0xD5C2, 0xB871, 0xB872, 0xBFA2, 0xB873, 0xCDAF, 0xF1B5, 0xB874, 0xB875, 0xB876, 0xB877, 0xB878, 0xB879, 0xBDDF, 0xB87A, 0xB6CB, 0xB87B, 0xB87C, 0xB87D, 0xB87E, 0xB880, 0xB881, 0xB882, 0xB883, 0xB884, 0xD6F1, 0xF3C3, 0xB885, 0xB886, 0xF3C4, 0xB887, 0xB8CD, 0xB888, 0xB889, 0xB88A, 0xF3C6, 0xF3C7, 0xB88B, 0xB0CA, 0xB88C, 0xF3C5, 0xB88D, 0xF3C9, 0xCBF1, 0xB88E, 0xB88F, 0xB890, 0xF3CB, 0xB891, 0xD0A6, 0xB892, 0xB893, 0xB1CA, 0xF3C8, 0xB894, 0xB895, 0xB896, 0xF3CF, 0xB897, 0xB5D1, 0xB898, 0xB899, 0xF3D7, 0xB89A, 0xF3D2, 0xB89B, 0xB89C, 0xB89D, 0xF3D4, 0xF3D3, 0xB7FB, 0xB89E, 0xB1BF, 0xB89F, 0xF3CE, 0xF3CA, 0xB5DA, 0xB8A0, 0xF3D0, 0xB940, 0xB941, 0xF3D1, 0xB942, 0xF3D5, 0xB943, 0xB944, 0xB945, 0xB946, 0xF3CD, 0xB947, 0xBCE3, 0xB948, 0xC1FD, 0xB949, 0xF3D6, 0xB94A, 0xB94B, 0xB94C, 0xB94D, 0xB94E, 0xB94F, 0xF3DA, 0xB950, 0xF3CC, 0xB951, 0xB5C8, 0xB952, 0xBDEE, 0xF3DC, 0xB953, 0xB954, 0xB7A4, 0xBFF0, 0xD6FE, 0xCDB2, 0xB955, 0xB4F0, 0xB956, 0xB2DF, 0xB957, 0xF3D8, 0xB958, 0xF3D9, 0xC9B8, 0xB959, 0xF3DD, 0xB95A, 0xB95B, 0xF3DE, 0xB95C, 0xF3E1, 0xB95D, 0xB95E, 0xB95F, 0xB960, 0xB961, 0xB962, 0xB963, 0xB964, 0xB965, 0xB966, 0xB967, 0xF3DF, 0xB968, 0xB969, 0xF3E3, 0xF3E2, 0xB96A, 0xB96B, 0xF3DB, 0xB96C, 0xBFEA, 0xB96D, 0xB3EF, 0xB96E, 0xF3E0, 0xB96F, 0xB970, 0xC7A9, 0xB971, 0xBCF2, 0xB972, 0xB973, 0xB974, 0xB975, 0xF3EB, 0xB976, 0xB977, 0xB978, 0xB979, 0xB97A, 0xB97B, 0xB97C, 0xB9BF, 0xB97D, 0xB97E, 0xF3E4, 0xB980, 0xB981, 0xB982, 0xB2AD, 0xBBFE, 0xB983, 0xCBE3, 0xB984, 0xB985, 0xB986, 0xB987, 0xF3ED, 0xF3E9, 0xB988, 0xB989, 0xB98A, 0xB9DC, 0xF3EE, 0xB98B, 0xB98C, 0xB98D, 0xF3E5, 0xF3E6, 0xF3EA, 0xC2E1, 0xF3EC, 0xF3EF, 0xF3E8, 0xBCFD, 0xB98E, 0xB98F, 0xB990, 0xCFE4, 0xB991, 0xB992, 0xF3F0, 0xB993, 0xB994, 0xB995, 0xF3E7, 0xB996, 0xB997, 0xB998, 0xB999, 0xB99A, 0xB99B, 0xB99C, 0xB99D, 0xF3F2, 0xB99E, 0xB99F, 0xB9A0, 0xBA40, 0xD7AD, 0xC6AA, 0xBA41, 0xBA42, 0xBA43, 0xBA44, 0xF3F3, 0xBA45, 0xBA46, 0xBA47, 0xBA48, 0xF3F1, 0xBA49, 0xC2A8, 0xBA4A, 0xBA4B, 0xBA4C, 0xBA4D, 0xBA4E, 0xB8DD, 0xF3F5, 0xBA4F, 0xBA50, 0xF3F4, 0xBA51, 0xBA52, 0xBA53, 0xB4DB, 0xBA54, 0xBA55, 0xBA56, 0xF3F6, 0xF3F7, 0xBA57, 0xBA58, 0xBA59, 0xF3F8, 0xBA5A, 0xBA5B, 0xBA5C, 0xC0BA, 0xBA5D, 0xBA5E, 0xC0E9, 0xBA5F, 0xBA60, 0xBA61, 0xBA62, 0xBA63, 0xC5F1, 0xBA64, 0xBA65, 0xBA66, 0xBA67, 0xF3FB, 0xBA68, 0xF3FA, 0xBA69, 0xBA6A, 0xBA6B, 0xBA6C, 0xBA6D, 0xBA6E, 0xBA6F, 0xBA70, 0xB4D8, 0xBA71, 0xBA72, 0xBA73, 0xF3FE, 0xF3F9, 0xBA74, 0xBA75, 0xF3FC, 0xBA76, 0xBA77, 0xBA78, 0xBA79, 0xBA7A, 0xBA7B, 0xF3FD, 0xBA7C, 0xBA7D, 0xBA7E, 0xBA80, 0xBA81, 0xBA82, 0xBA83, 0xBA84, 0xF4A1, 0xBA85, 0xBA86, 0xBA87, 0xBA88, 0xBA89, 0xBA8A, 0xF4A3, 0xBBC9, 0xBA8B, 0xBA8C, 0xF4A2, 0xBA8D, 0xBA8E, 0xBA8F, 0xBA90, 0xBA91, 0xBA92, 0xBA93, 0xBA94, 0xBA95, 0xBA96, 0xBA97, 0xBA98, 0xBA99, 0xF4A4, 0xBA9A, 0xBA9B, 0xBA9C, 0xBA9D, 0xBA9E, 0xBA9F, 0xB2BE, 0xF4A6, 0xF4A5, 0xBAA0, 0xBB40, 0xBB41, 0xBB42, 0xBB43, 0xBB44, 0xBB45, 0xBB46, 0xBB47, 0xBB48, 0xBB49, 0xBCAE, 0xBB4A, 0xBB4B, 0xBB4C, 0xBB4D, 0xBB4E, 0xBB4F, 0xBB50, 0xBB51, 0xBB52, 0xBB53, 0xBB54, 0xBB55, 0xBB56, 0xBB57, 0xBB58, 0xBB59, 0xBB5A, 0xBB5B, 0xBB5C, 0xBB5D, 0xBB5E, 0xBB5F, 0xBB60, 0xBB61, 0xBB62, 0xBB63, 0xBB64, 0xBB65, 0xBB66, 0xBB67, 0xBB68, 0xBB69, 0xBB6A, 0xBB6B, 0xBB6C, 0xBB6D, 0xBB6E, 0xC3D7, 0xD9E1, 0xBB6F, 0xBB70, 0xBB71, 0xBB72, 0xBB73, 0xBB74, 0xC0E0, 0xF4CC, 0xD7D1, 0xBB75, 0xBB76, 0xBB77, 0xBB78, 0xBB79, 0xBB7A, 0xBB7B, 0xBB7C, 0xBB7D, 0xBB7E, 0xBB80, 0xB7DB, 0xBB81, 0xBB82, 0xBB83, 0xBB84, 0xBB85, 0xBB86, 0xBB87, 0xF4CE, 0xC1A3, 0xBB88, 0xBB89, 0xC6C9, 0xBB8A, 0xB4D6, 0xD5B3, 0xBB8B, 0xBB8C, 0xBB8D, 0xF4D0, 0xF4CF, 0xF4D1, 0xCBDA, 0xBB8E, 0xBB8F, 0xF4D2, 0xBB90, 0xD4C1, 0xD6E0, 0xBB91, 0xBB92, 0xBB93, 0xBB94, 0xB7E0, 0xBB95, 0xBB96, 0xBB97, 0xC1B8, 0xBB98, 0xBB99, 0xC1BB, 0xF4D3, 0xBEAC, 0xBB9A, 0xBB9B, 0xBB9C, 0xBB9D, 0xBB9E, 0xB4E2, 0xBB9F, 0xBBA0, 0xF4D4, 0xF4D5, 0xBEAB, 0xBC40, 0xBC41, 0xF4D6, 0xBC42, 0xBC43, 0xBC44, 0xF4DB, 0xBC45, 0xF4D7, 0xF4DA, 0xBC46, 0xBAFD, 0xBC47, 0xF4D8, 0xF4D9, 0xBC48, 0xBC49, 0xBC4A, 0xBC4B, 0xBC4C, 0xBC4D, 0xBC4E, 0xB8E2, 0xCCC7, 0xF4DC, 0xBC4F, 0xB2DA, 0xBC50, 0xBC51, 0xC3D3, 0xBC52, 0xBC53, 0xD4E3, 0xBFB7, 0xBC54, 0xBC55, 0xBC56, 0xBC57, 0xBC58, 0xBC59, 0xBC5A, 0xF4DD, 0xBC5B, 0xBC5C, 0xBC5D, 0xBC5E, 0xBC5F, 0xBC60, 0xC5B4, 0xBC61, 0xBC62, 0xBC63, 0xBC64, 0xBC65, 0xBC66, 0xBC67, 0xBC68, 0xF4E9, 0xBC69, 0xBC6A, 0xCFB5, 0xBC6B, 0xBC6C, 0xBC6D, 0xBC6E, 0xBC6F, 0xBC70, 0xBC71, 0xBC72, 0xBC73, 0xBC74, 0xBC75, 0xBC76, 0xBC77, 0xBC78, 0xCEC9, 0xBC79, 0xBC7A, 0xBC7B, 0xBC7C, 0xBC7D, 0xBC7E, 0xBC80, 0xBC81, 0xBC82, 0xBC83, 0xBC84, 0xBC85, 0xBC86, 0xBC87, 0xBC88, 0xBC89, 0xBC8A, 0xBC8B, 0xBC8C, 0xBC8D, 0xBC8E, 0xCBD8, 0xBC8F, 0xCBF7, 0xBC90, 0xBC91, 0xBC92, 0xBC93, 0xBDF4, 0xBC94, 0xBC95, 0xBC96, 0xD7CF, 0xBC97, 0xBC98, 0xBC99, 0xC0DB, 0xBC9A, 0xBC9B, 0xBC9C, 0xBC9D, 0xBC9E, 0xBC9F, 0xBCA0, 0xBD40, 0xBD41, 0xBD42, 0xBD43, 0xBD44, 0xBD45, 0xBD46, 0xBD47, 0xBD48, 0xBD49, 0xBD4A, 0xBD4B, 0xBD4C, 0xBD4D, 0xBD4E, 0xBD4F, 0xBD50, 0xBD51, 0xBD52, 0xBD53, 0xBD54, 0xBD55, 0xBD56, 0xBD57, 0xBD58, 0xBD59, 0xBD5A, 0xBD5B, 0xBD5C, 0xBD5D, 0xBD5E, 0xBD5F, 0xBD60, 0xBD61, 0xBD62, 0xBD63, 0xBD64, 0xBD65, 0xBD66, 0xBD67, 0xBD68, 0xBD69, 0xBD6A, 0xBD6B, 0xBD6C, 0xBD6D, 0xBD6E, 0xBD6F, 0xBD70, 0xBD71, 0xBD72, 0xBD73, 0xBD74, 0xBD75, 0xBD76, 0xD0F5, 0xBD77, 0xBD78, 0xBD79, 0xBD7A, 0xBD7B, 0xBD7C, 0xBD7D, 0xBD7E, 0xF4EA, 0xBD80, 0xBD81, 0xBD82, 0xBD83, 0xBD84, 0xBD85, 0xBD86, 0xBD87, 0xBD88, 0xBD89, 0xBD8A, 0xBD8B, 0xBD8C, 0xBD8D, 0xBD8E, 0xBD8F, 0xBD90, 0xBD91, 0xBD92, 0xBD93, 0xBD94, 0xBD95, 0xBD96, 0xBD97, 0xBD98, 0xBD99, 0xBD9A, 0xBD9B, 0xBD9C, 0xBD9D, 0xBD9E, 0xBD9F, 0xBDA0, 0xBE40, 0xBE41, 0xBE42, 0xBE43, 0xBE44, 0xBE45, 0xBE46, 0xBE47, 0xBE48, 0xBE49, 0xBE4A, 0xBE4B, 0xBE4C, 0xF4EB, 0xBE4D, 0xBE4E, 0xBE4F, 0xBE50, 0xBE51, 0xBE52, 0xBE53, 0xF4EC, 0xBE54, 0xBE55, 0xBE56, 0xBE57, 0xBE58, 0xBE59, 0xBE5A, 0xBE5B, 0xBE5C, 0xBE5D, 0xBE5E, 0xBE5F, 0xBE60, 0xBE61, 0xBE62, 0xBE63, 0xBE64, 0xBE65, 0xBE66, 0xBE67, 0xBE68, 0xBE69, 0xBE6A, 0xBE6B, 0xBE6C, 0xBE6D, 0xBE6E, 0xBE6F, 0xBE70, 0xBE71, 0xBE72, 0xBE73, 0xBE74, 0xBE75, 0xBE76, 0xBE77, 0xBE78, 0xBE79, 0xBE7A, 0xBE7B, 0xBE7C, 0xBE7D, 0xBE7E, 0xBE80, 0xBE81, 0xBE82, 0xBE83, 0xBE84, 0xBE85, 0xBE86, 0xBE87, 0xBE88, 0xBE89, 0xBE8A, 0xBE8B, 0xBE8C, 0xBE8D, 0xBE8E, 0xBE8F, 0xBE90, 0xBE91, 0xBE92, 0xBE93, 0xBE94, 0xBE95, 0xBE96, 0xBE97, 0xBE98, 0xBE99, 0xBE9A, 0xBE9B, 0xBE9C, 0xBE9D, 0xBE9E, 0xBE9F, 0xBEA0, 0xBF40, 0xBF41, 0xBF42, 0xBF43, 0xBF44, 0xBF45, 0xBF46, 0xBF47, 0xBF48, 0xBF49, 0xBF4A, 0xBF4B, 0xBF4C, 0xBF4D, 0xBF4E, 0xBF4F, 0xBF50, 0xBF51, 0xBF52, 0xBF53, 0xBF54, 0xBF55, 0xBF56, 0xBF57, 0xBF58, 0xBF59, 0xBF5A, 0xBF5B, 0xBF5C, 0xBF5D, 0xBF5E, 0xBF5F, 0xBF60, 0xBF61, 0xBF62, 0xBF63, 0xBF64, 0xBF65, 0xBF66, 0xBF67, 0xBF68, 0xBF69, 0xBF6A, 0xBF6B, 0xBF6C, 0xBF6D, 0xBF6E, 0xBF6F, 0xBF70, 0xBF71, 0xBF72, 0xBF73, 0xBF74, 0xBF75, 0xBF76, 0xBF77, 0xBF78, 0xBF79, 0xBF7A, 0xBF7B, 0xBF7C, 0xBF7D, 0xBF7E, 0xBF80, 0xF7E3, 0xBF81, 0xBF82, 0xBF83, 0xBF84, 0xBF85, 0xB7B1, 0xBF86, 0xBF87, 0xBF88, 0xBF89, 0xBF8A, 0xF4ED, 0xBF8B, 0xBF8C, 0xBF8D, 0xBF8E, 0xBF8F, 0xBF90, 0xBF91, 0xBF92, 0xBF93, 0xBF94, 0xBF95, 0xBF96, 0xBF97, 0xBF98, 0xBF99, 0xBF9A, 0xBF9B, 0xBF9C, 0xBF9D, 0xBF9E, 0xBF9F, 0xBFA0, 0xC040, 0xC041, 0xC042, 0xC043, 0xC044, 0xC045, 0xC046, 0xC047, 0xC048, 0xC049, 0xC04A, 0xC04B, 0xC04C, 0xC04D, 0xC04E, 0xC04F, 0xC050, 0xC051, 0xC052, 0xC053, 0xC054, 0xC055, 0xC056, 0xC057, 0xC058, 0xC059, 0xC05A, 0xC05B, 0xC05C, 0xC05D, 0xC05E, 0xC05F, 0xC060, 0xC061, 0xC062, 0xC063, 0xD7EB, 0xC064, 0xC065, 0xC066, 0xC067, 0xC068, 0xC069, 0xC06A, 0xC06B, 0xC06C, 0xC06D, 0xC06E, 0xC06F, 0xC070, 0xC071, 0xC072, 0xC073, 0xC074, 0xC075, 0xC076, 0xC077, 0xC078, 0xC079, 0xC07A, 0xC07B, 0xF4EE, 0xC07C, 0xC07D, 0xC07E, 0xE6F9, 0xBEC0, 0xE6FA, 0xBAEC, 0xE6FB, 0xCFCB, 0xE6FC, 0xD4BC, 0xBCB6, 0xE6FD, 0xE6FE, 0xBCCD, 0xC8D2, 0xCEB3, 0xE7A1, 0xC080, 0xB4BF, 0xE7A2, 0xC9B4, 0xB8D9, 0xC4C9, 0xC081, 0xD7DD, 0xC2DA, 0xB7D7, 0xD6BD, 0xCEC6, 0xB7C4, 0xC082, 0xC083, 0xC5A6, 0xE7A3, 0xCFDF, 0xE7A4, 0xE7A5, 0xE7A6, 0xC1B7, 0xD7E9, 0xC9F0, 0xCFB8, 0xD6AF, 0xD6D5, 0xE7A7, 0xB0ED, 0xE7A8, 0xE7A9, 0xC9DC, 0xD2EF, 0xBEAD, 0xE7AA, 0xB0F3, 0xC8DE, 0xBDE1, 0xE7AB, 0xC8C6, 0xC084, 0xE7AC, 0xBBE6, 0xB8F8, 0xD1A4, 0xE7AD, 0xC2E7, 0xBEF8, 0xBDCA, 0xCDB3, 0xE7AE, 0xE7AF, 0xBEEE, 0xD0E5, 0xC085, 0xCBE7, 0xCCD0, 0xBCCC, 0xE7B0, 0xBCA8, 0xD0F7, 0xE7B1, 0xC086, 0xD0F8, 0xE7B2, 0xE7B3, 0xB4C2, 0xE7B4, 0xE7B5, 0xC9FE, 0xCEAC, 0xC3E0, 0xE7B7, 0xB1C1, 0xB3F1, 0xC087, 0xE7B8, 0xE7B9, 0xD7DB, 0xD5C0, 0xE7BA, 0xC2CC, 0xD7BA, 0xE7BB, 0xE7BC, 0xE7BD, 0xBCEA, 0xC3E5, 0xC0C2, 0xE7BE, 0xE7BF, 0xBCA9, 0xC088, 0xE7C0, 0xE7C1, 0xE7B6, 0xB6D0, 0xE7C2, 0xC089, 0xE7C3, 0xE7C4, 0xBBBA, 0xB5DE, 0xC2C6, 0xB1E0, 0xE7C5, 0xD4B5, 0xE7C6, 0xB8BF, 0xE7C8, 0xE7C7, 0xB7EC, 0xC08A, 0xE7C9, 0xB2F8, 0xE7CA, 0xE7CB, 0xE7CC, 0xE7CD, 0xE7CE, 0xE7CF, 0xE7D0, 0xD3A7, 0xCBF5, 0xE7D1, 0xE7D2, 0xE7D3, 0xE7D4, 0xC9C9, 0xE7D5, 0xE7D6, 0xE7D7, 0xE7D8, 0xE7D9, 0xBDC9, 0xE7DA, 0xF3BE, 0xC08B, 0xB8D7, 0xC08C, 0xC8B1, 0xC08D, 0xC08E, 0xC08F, 0xC090, 0xC091, 0xC092, 0xC093, 0xF3BF, 0xC094, 0xF3C0, 0xF3C1, 0xC095, 0xC096, 0xC097, 0xC098, 0xC099, 0xC09A, 0xC09B, 0xC09C, 0xC09D, 0xC09E, 0xB9DE, 0xCDF8, 0xC09F, 0xC0A0, 0xD8E8, 0xBAB1, 0xC140, 0xC2DE, 0xEEB7, 0xC141, 0xB7A3, 0xC142, 0xC143, 0xC144, 0xC145, 0xEEB9, 0xC146, 0xEEB8, 0xB0D5, 0xC147, 0xC148, 0xC149, 0xC14A, 0xC14B, 0xEEBB, 0xD5D6, 0xD7EF, 0xC14C, 0xC14D, 0xC14E, 0xD6C3, 0xC14F, 0xC150, 0xEEBD, 0xCAF0, 0xC151, 0xEEBC, 0xC152, 0xC153, 0xC154, 0xC155, 0xEEBE, 0xC156, 0xC157, 0xC158, 0xC159, 0xEEC0, 0xC15A, 0xC15B, 0xEEBF, 0xC15C, 0xC15D, 0xC15E, 0xC15F, 0xC160, 0xC161, 0xC162, 0xC163, 0xD1F2, 0xC164, 0xC7BC, 0xC165, 0xC3C0, 0xC166, 0xC167, 0xC168, 0xC169, 0xC16A, 0xB8E1, 0xC16B, 0xC16C, 0xC16D, 0xC16E, 0xC16F, 0xC1E7, 0xC170, 0xC171, 0xF4C6, 0xD0DF, 0xF4C7, 0xC172, 0xCFDB, 0xC173, 0xC174, 0xC8BA, 0xC175, 0xC176, 0xF4C8, 0xC177, 0xC178, 0xC179, 0xC17A, 0xC17B, 0xC17C, 0xC17D, 0xF4C9, 0xF4CA, 0xC17E, 0xF4CB, 0xC180, 0xC181, 0xC182, 0xC183, 0xC184, 0xD9FA, 0xB8FE, 0xC185, 0xC186, 0xE5F1, 0xD3F0, 0xC187, 0xF4E0, 0xC188, 0xCECC, 0xC189, 0xC18A, 0xC18B, 0xB3E1, 0xC18C, 0xC18D, 0xC18E, 0xC18F, 0xF1B4, 0xC190, 0xD2EE, 0xC191, 0xF4E1, 0xC192, 0xC193, 0xC194, 0xC195, 0xC196, 0xCFE8, 0xF4E2, 0xC197, 0xC198, 0xC7CC, 0xC199, 0xC19A, 0xC19B, 0xC19C, 0xC19D, 0xC19E, 0xB5D4, 0xB4E4, 0xF4E4, 0xC19F, 0xC1A0, 0xC240, 0xF4E3, 0xF4E5, 0xC241, 0xC242, 0xF4E6, 0xC243, 0xC244, 0xC245, 0xC246, 0xF4E7, 0xC247, 0xBAB2, 0xB0BF, 0xC248, 0xF4E8, 0xC249, 0xC24A, 0xC24B, 0xC24C, 0xC24D, 0xC24E, 0xC24F, 0xB7AD, 0xD2ED, 0xC250, 0xC251, 0xC252, 0xD2AB, 0xC0CF, 0xC253, 0xBFBC, 0xEBA3, 0xD5DF, 0xEAC8, 0xC254, 0xC255, 0xC256, 0xC257, 0xF1F3, 0xB6F8, 0xCBA3, 0xC258, 0xC259, 0xC4CD, 0xC25A, 0xF1E7, 0xC25B, 0xF1E8, 0xB8FB, 0xF1E9, 0xBAC4, 0xD4C5, 0xB0D2, 0xC25C, 0xC25D, 0xF1EA, 0xC25E, 0xC25F, 0xC260, 0xF1EB, 0xC261, 0xF1EC, 0xC262, 0xC263, 0xF1ED, 0xF1EE, 0xF1EF, 0xF1F1, 0xF1F0, 0xC5D5, 0xC264, 0xC265, 0xC266, 0xC267, 0xC268, 0xC269, 0xF1F2, 0xC26A, 0xB6FA, 0xC26B, 0xF1F4, 0xD2AE, 0xDEC7, 0xCBCA, 0xC26C, 0xC26D, 0xB3DC, 0xC26E, 0xB5A2, 0xC26F, 0xB9A2, 0xC270, 0xC271, 0xC4F4, 0xF1F5, 0xC272, 0xC273, 0xF1F6, 0xC274, 0xC275, 0xC276, 0xC1C4, 0xC1FB, 0xD6B0, 0xF1F7, 0xC277, 0xC278, 0xC279, 0xC27A, 0xF1F8, 0xC27B, 0xC1AA, 0xC27C, 0xC27D, 0xC27E, 0xC6B8, 0xC280, 0xBEDB, 0xC281, 0xC282, 0xC283, 0xC284, 0xC285, 0xC286, 0xC287, 0xC288, 0xC289, 0xC28A, 0xC28B, 0xC28C, 0xC28D, 0xC28E, 0xF1F9, 0xB4CF, 0xC28F, 0xC290, 0xC291, 0xC292, 0xC293, 0xC294, 0xF1FA, 0xC295, 0xC296, 0xC297, 0xC298, 0xC299, 0xC29A, 0xC29B, 0xC29C, 0xC29D, 0xC29E, 0xC29F, 0xC2A0, 0xC340, 0xEDB2, 0xEDB1, 0xC341, 0xC342, 0xCBE0, 0xD2DE, 0xC343, 0xCBC1, 0xD5D8, 0xC344, 0xC8E2, 0xC345, 0xC0DF, 0xBCA1, 0xC346, 0xC347, 0xC348, 0xC349, 0xC34A, 0xC34B, 0xEBC1, 0xC34C, 0xC34D, 0xD0A4, 0xC34E, 0xD6E2, 0xC34F, 0xB6C7, 0xB8D8, 0xEBC0, 0xB8CE, 0xC350, 0xEBBF, 0xB3A6, 0xB9C9, 0xD6AB, 0xC351, 0xB7F4, 0xB7CA, 0xC352, 0xC353, 0xC354, 0xBCE7, 0xB7BE, 0xEBC6, 0xC355, 0xEBC7, 0xB0B9, 0xBFCF, 0xC356, 0xEBC5, 0xD3FD, 0xC357, 0xEBC8, 0xC358, 0xC359, 0xEBC9, 0xC35A, 0xC35B, 0xB7CE, 0xC35C, 0xEBC2, 0xEBC4, 0xC9F6, 0xD6D7, 0xD5CD, 0xD0B2, 0xEBCF, 0xCEB8, 0xEBD0, 0xC35D, 0xB5A8, 0xC35E, 0xC35F, 0xC360, 0xC361, 0xC362, 0xB1B3, 0xEBD2, 0xCCA5, 0xC363, 0xC364, 0xC365, 0xC366, 0xC367, 0xC368, 0xC369, 0xC5D6, 0xEBD3, 0xC36A, 0xEBD1, 0xC5DF, 0xEBCE, 0xCAA4, 0xEBD5, 0xB0FB, 0xC36B, 0xC36C, 0xBAFA, 0xC36D, 0xC36E, 0xD8B7, 0xF1E3, 0xC36F, 0xEBCA, 0xEBCB, 0xEBCC, 0xEBCD, 0xEBD6, 0xE6C0, 0xEBD9, 0xC370, 0xBFE8, 0xD2C8, 0xEBD7, 0xEBDC, 0xB8EC, 0xEBD8, 0xC371, 0xBDBA, 0xC372, 0xD0D8, 0xC373, 0xB0B7, 0xC374, 0xEBDD, 0xC4DC, 0xC375, 0xC376, 0xC377, 0xC378, 0xD6AC, 0xC379, 0xC37A, 0xC37B, 0xB4E0, 0xC37C, 0xC37D, 0xC2F6, 0xBCB9, 0xC37E, 0xC380, 0xEBDA, 0xEBDB, 0xD4E0, 0xC6EA, 0xC4D4, 0xEBDF, 0xC5A7, 0xD9F5, 0xC381, 0xB2B1, 0xC382, 0xEBE4, 0xC383, 0xBDC5, 0xC384, 0xC385, 0xC386, 0xEBE2, 0xC387, 0xC388, 0xC389, 0xC38A, 0xC38B, 0xC38C, 0xC38D, 0xC38E, 0xC38F, 0xC390, 0xC391, 0xC392, 0xC393, 0xEBE3, 0xC394, 0xC395, 0xB8AC, 0xC396, 0xCDD1, 0xEBE5, 0xC397, 0xC398, 0xC399, 0xEBE1, 0xC39A, 0xC1B3, 0xC39B, 0xC39C, 0xC39D, 0xC39E, 0xC39F, 0xC6A2, 0xC3A0, 0xC440, 0xC441, 0xC442, 0xC443, 0xC444, 0xC445, 0xCCF3, 0xC446, 0xEBE6, 0xC447, 0xC0B0, 0xD2B8, 0xEBE7, 0xC448, 0xC449, 0xC44A, 0xB8AF, 0xB8AD, 0xC44B, 0xEBE8, 0xC7BB, 0xCDF3, 0xC44C, 0xC44D, 0xC44E, 0xEBEA, 0xEBEB, 0xC44F, 0xC450, 0xC451, 0xC452, 0xC453, 0xEBED, 0xC454, 0xC455, 0xC456, 0xC457, 0xD0C8, 0xC458, 0xEBF2, 0xC459, 0xEBEE, 0xC45A, 0xC45B, 0xC45C, 0xEBF1, 0xC8F9, 0xC45D, 0xD1FC, 0xEBEC, 0xC45E, 0xC45F, 0xEBE9, 0xC460, 0xC461, 0xC462, 0xC463, 0xB8B9, 0xCFD9, 0xC4E5, 0xEBEF, 0xEBF0, 0xCCDA, 0xCDC8, 0xB0F2, 0xC464, 0xEBF6, 0xC465, 0xC466, 0xC467, 0xC468, 0xC469, 0xEBF5, 0xC46A, 0xB2B2, 0xC46B, 0xC46C, 0xC46D, 0xC46E, 0xB8E0, 0xC46F, 0xEBF7, 0xC470, 0xC471, 0xC472, 0xC473, 0xC474, 0xC475, 0xB1EC, 0xC476, 0xC477, 0xCCC5, 0xC4A4, 0xCFA5, 0xC478, 0xC479, 0xC47A, 0xC47B, 0xC47C, 0xEBF9, 0xC47D, 0xC47E, 0xECA2, 0xC480, 0xC5F2, 0xC481, 0xEBFA, 0xC482, 0xC483, 0xC484, 0xC485, 0xC486, 0xC487, 0xC488, 0xC489, 0xC9C5, 0xC48A, 0xC48B, 0xC48C, 0xC48D, 0xC48E, 0xC48F, 0xE2DF, 0xEBFE, 0xC490, 0xC491, 0xC492, 0xC493, 0xCDCE, 0xECA1, 0xB1DB, 0xD3B7, 0xC494, 0xC495, 0xD2DC, 0xC496, 0xC497, 0xC498, 0xEBFD, 0xC499, 0xEBFB, 0xC49A, 0xC49B, 0xC49C, 0xC49D, 0xC49E, 0xC49F, 0xC4A0, 0xC540, 0xC541, 0xC542, 0xC543, 0xC544, 0xC545, 0xC546, 0xC547, 0xC548, 0xC549, 0xC54A, 0xC54B, 0xC54C, 0xC54D, 0xC54E, 0xB3BC, 0xC54F, 0xC550, 0xC551, 0xEAB0, 0xC552, 0xC553, 0xD7D4, 0xC554, 0xF4AB, 0xB3F4, 0xC555, 0xC556, 0xC557, 0xC558, 0xC559, 0xD6C1, 0xD6C2, 0xC55A, 0xC55B, 0xC55C, 0xC55D, 0xC55E, 0xC55F, 0xD5E9, 0xBECA, 0xC560, 0xF4A7, 0xC561, 0xD2A8, 0xF4A8, 0xF4A9, 0xC562, 0xF4AA, 0xBECB, 0xD3DF, 0xC563, 0xC564, 0xC565, 0xC566, 0xC567, 0xC9E0, 0xC9E1, 0xC568, 0xC569, 0xF3C2, 0xC56A, 0xCAE6, 0xC56B, 0xCCF2, 0xC56C, 0xC56D, 0xC56E, 0xC56F, 0xC570, 0xC571, 0xE2B6, 0xCBB4, 0xC572, 0xCEE8, 0xD6DB, 0xC573, 0xF4AD, 0xF4AE, 0xF4AF, 0xC574, 0xC575, 0xC576, 0xC577, 0xF4B2, 0xC578, 0xBABD, 0xF4B3, 0xB0E3, 0xF4B0, 0xC579, 0xF4B1, 0xBDA2, 0xB2D5, 0xC57A, 0xF4B6, 0xF4B7, 0xB6E6, 0xB2B0, 0xCFCF, 0xF4B4, 0xB4AC, 0xC57B, 0xF4B5, 0xC57C, 0xC57D, 0xF4B8, 0xC57E, 0xC580, 0xC581, 0xC582, 0xC583, 0xF4B9, 0xC584, 0xC585, 0xCDA7, 0xC586, 0xF4BA, 0xC587, 0xF4BB, 0xC588, 0xC589, 0xC58A, 0xF4BC, 0xC58B, 0xC58C, 0xC58D, 0xC58E, 0xC58F, 0xC590, 0xC591, 0xC592, 0xCBD2, 0xC593, 0xF4BD, 0xC594, 0xC595, 0xC596, 0xC597, 0xF4BE, 0xC598, 0xC599, 0xC59A, 0xC59B, 0xC59C, 0xC59D, 0xC59E, 0xC59F, 0xF4BF, 0xC5A0, 0xC640, 0xC641, 0xC642, 0xC643, 0xF4DE, 0xC1BC, 0xBCE8, 0xC644, 0xC9AB, 0xD1DE, 0xE5F5, 0xC645, 0xC646, 0xC647, 0xC648, 0xDCB3, 0xD2D5, 0xC649, 0xC64A, 0xDCB4, 0xB0AC, 0xDCB5, 0xC64B, 0xC64C, 0xBDDA, 0xC64D, 0xDCB9, 0xC64E, 0xC64F, 0xC650, 0xD8C2, 0xC651, 0xDCB7, 0xD3F3, 0xC652, 0xC9D6, 0xDCBA, 0xDCB6, 0xC653, 0xDCBB, 0xC3A2, 0xC654, 0xC655, 0xC656, 0xC657, 0xDCBC, 0xDCC5, 0xDCBD, 0xC658, 0xC659, 0xCEDF, 0xD6A5, 0xC65A, 0xDCCF, 0xC65B, 0xDCCD, 0xC65C, 0xC65D, 0xDCD2, 0xBDE6, 0xC2AB, 0xC65E, 0xDCB8, 0xDCCB, 0xDCCE, 0xDCBE, 0xB7D2, 0xB0C5, 0xDCC7, 0xD0BE, 0xDCC1, 0xBBA8, 0xC65F, 0xB7BC, 0xDCCC, 0xC660, 0xC661, 0xDCC6, 0xDCBF, 0xC7DB, 0xC662, 0xC663, 0xC664, 0xD1BF, 0xDCC0, 0xC665, 0xC666, 0xDCCA, 0xC667, 0xC668, 0xDCD0, 0xC669, 0xC66A, 0xCEAD, 0xDCC2, 0xC66B, 0xDCC3, 0xDCC8, 0xDCC9, 0xB2D4, 0xDCD1, 0xCBD5, 0xC66C, 0xD4B7, 0xDCDB, 0xDCDF, 0xCCA6, 0xDCE6, 0xC66D, 0xC3E7, 0xDCDC, 0xC66E, 0xC66F, 0xBFC1, 0xDCD9, 0xC670, 0xB0FA, 0xB9B6, 0xDCE5, 0xDCD3, 0xC671, 0xDCC4, 0xDCD6, 0xC8F4, 0xBFE0, 0xC672, 0xC673, 0xC674, 0xC675, 0xC9BB, 0xC676, 0xC677, 0xC678, 0xB1BD, 0xC679, 0xD3A2, 0xC67A, 0xC67B, 0xDCDA, 0xC67C, 0xC67D, 0xDCD5, 0xC67E, 0xC6BB, 0xC680, 0xDCDE, 0xC681, 0xC682, 0xC683, 0xC684, 0xC685, 0xD7C2, 0xC3AF, 0xB7B6, 0xC7D1, 0xC3A9, 0xDCE2, 0xDCD8, 0xDCEB, 0xDCD4, 0xC686, 0xC687, 0xDCDD, 0xC688, 0xBEA5, 0xDCD7, 0xC689, 0xDCE0, 0xC68A, 0xC68B, 0xDCE3, 0xDCE4, 0xC68C, 0xDCF8, 0xC68D, 0xC68E, 0xDCE1, 0xDDA2, 0xDCE7, 0xC68F, 0xC690, 0xC691, 0xC692, 0xC693, 0xC694, 0xC695, 0xC696, 0xC697, 0xC698, 0xBCEB, 0xB4C4, 0xC699, 0xC69A, 0xC3A3, 0xB2E7, 0xDCFA, 0xC69B, 0xDCF2, 0xC69C, 0xDCEF, 0xC69D, 0xDCFC, 0xDCEE, 0xD2F0, 0xB2E8, 0xC69E, 0xC8D7, 0xC8E3, 0xDCFB, 0xC69F, 0xDCED, 0xC6A0, 0xC740, 0xC741, 0xDCF7, 0xC742, 0xC743, 0xDCF5, 0xC744, 0xC745, 0xBEA3, 0xDCF4, 0xC746, 0xB2DD, 0xC747, 0xC748, 0xC749, 0xC74A, 0xC74B, 0xDCF3, 0xBCF6, 0xDCE8, 0xBBC4, 0xC74C, 0xC0F3, 0xC74D, 0xC74E, 0xC74F, 0xC750, 0xC751, 0xBCD4, 0xDCE9, 0xDCEA, 0xC752, 0xDCF1, 0xDCF6, 0xDCF9, 0xB5B4, 0xC753, 0xC8D9, 0xBBE7, 0xDCFE, 0xDCFD, 0xD3AB, 0xDDA1, 0xDDA3, 0xDDA5, 0xD2F1, 0xDDA4, 0xDDA6, 0xDDA7, 0xD2A9, 0xC754, 0xC755, 0xC756, 0xC757, 0xC758, 0xC759, 0xC75A, 0xBAC9, 0xDDA9, 0xC75B, 0xC75C, 0xDDB6, 0xDDB1, 0xDDB4, 0xC75D, 0xC75E, 0xC75F, 0xC760, 0xC761, 0xC762, 0xC763, 0xDDB0, 0xC6CE, 0xC764, 0xC765, 0xC0F2, 0xC766, 0xC767, 0xC768, 0xC769, 0xC9AF, 0xC76A, 0xC76B, 0xC76C, 0xDCEC, 0xDDAE, 0xC76D, 0xC76E, 0xC76F, 0xC770, 0xDDB7, 0xC771, 0xC772, 0xDCF0, 0xDDAF, 0xC773, 0xDDB8, 0xC774, 0xDDAC, 0xC775, 0xC776, 0xC777, 0xC778, 0xC779, 0xC77A, 0xC77B, 0xDDB9, 0xDDB3, 0xDDAD, 0xC4AA, 0xC77C, 0xC77D, 0xC77E, 0xC780, 0xDDA8, 0xC0B3, 0xC1AB, 0xDDAA, 0xDDAB, 0xC781, 0xDDB2, 0xBBF1, 0xDDB5, 0xD3A8, 0xDDBA, 0xC782, 0xDDBB, 0xC3A7, 0xC783, 0xC784, 0xDDD2, 0xDDBC, 0xC785, 0xC786, 0xC787, 0xDDD1, 0xC788, 0xB9BD, 0xC789, 0xC78A, 0xBED5, 0xC78B, 0xBEFA, 0xC78C, 0xC78D, 0xBACA, 0xC78E, 0xC78F, 0xC790, 0xC791, 0xDDCA, 0xC792, 0xDDC5, 0xC793, 0xDDBF, 0xC794, 0xC795, 0xC796, 0xB2CB, 0xDDC3, 0xC797, 0xDDCB, 0xB2A4, 0xDDD5, 0xC798, 0xC799, 0xC79A, 0xDDBE, 0xC79B, 0xC79C, 0xC79D, 0xC6D0, 0xDDD0, 0xC79E, 0xC79F, 0xC7A0, 0xC840, 0xC841, 0xDDD4, 0xC1E2, 0xB7C6, 0xC842, 0xC843, 0xC844, 0xC845, 0xC846, 0xDDCE, 0xDDCF, 0xC847, 0xC848, 0xC849, 0xDDC4, 0xC84A, 0xC84B, 0xC84C, 0xDDBD, 0xC84D, 0xDDCD, 0xCCD1, 0xC84E, 0xDDC9, 0xC84F, 0xC850, 0xC851, 0xC852, 0xDDC2, 0xC3C8, 0xC6BC, 0xCEAE, 0xDDCC, 0xC853, 0xDDC8, 0xC854, 0xC855, 0xC856, 0xC857, 0xC858, 0xC859, 0xDDC1, 0xC85A, 0xC85B, 0xC85C, 0xDDC6, 0xC2DC, 0xC85D, 0xC85E, 0xC85F, 0xC860, 0xC861, 0xC862, 0xD3A9, 0xD3AA, 0xDDD3, 0xCFF4, 0xC8F8, 0xC863, 0xC864, 0xC865, 0xC866, 0xC867, 0xC868, 0xC869, 0xC86A, 0xDDE6, 0xC86B, 0xC86C, 0xC86D, 0xC86E, 0xC86F, 0xC870, 0xDDC7, 0xC871, 0xC872, 0xC873, 0xDDE0, 0xC2E4, 0xC874, 0xC875, 0xC876, 0xC877, 0xC878, 0xC879, 0xC87A, 0xC87B, 0xDDE1, 0xC87C, 0xC87D, 0xC87E, 0xC880, 0xC881, 0xC882, 0xC883, 0xC884, 0xC885, 0xC886, 0xDDD7, 0xC887, 0xC888, 0xC889, 0xC88A, 0xC88B, 0xD6F8, 0xC88C, 0xDDD9, 0xDDD8, 0xB8F0, 0xDDD6, 0xC88D, 0xC88E, 0xC88F, 0xC890, 0xC6CF, 0xC891, 0xB6AD, 0xC892, 0xC893, 0xC894, 0xC895, 0xC896, 0xDDE2, 0xC897, 0xBAF9, 0xD4E1, 0xDDE7, 0xC898, 0xC899, 0xC89A, 0xB4D0, 0xC89B, 0xDDDA, 0xC89C, 0xBFFB, 0xDDE3, 0xC89D, 0xDDDF, 0xC89E, 0xDDDD, 0xC89F, 0xC8A0, 0xC940, 0xC941, 0xC942, 0xC943, 0xC944, 0xB5D9, 0xC945, 0xC946, 0xC947, 0xC948, 0xDDDB, 0xDDDC, 0xDDDE, 0xC949, 0xBDAF, 0xDDE4, 0xC94A, 0xDDE5, 0xC94B, 0xC94C, 0xC94D, 0xC94E, 0xC94F, 0xC950, 0xC951, 0xC952, 0xDDF5, 0xC953, 0xC3C9, 0xC954, 0xC955, 0xCBE2, 0xC956, 0xC957, 0xC958, 0xC959, 0xDDF2, 0xC95A, 0xC95B, 0xC95C, 0xC95D, 0xC95E, 0xC95F, 0xC960, 0xC961, 0xC962, 0xC963, 0xC964, 0xC965, 0xC966, 0xD8E1, 0xC967, 0xC968, 0xC6D1, 0xC969, 0xDDF4, 0xC96A, 0xC96B, 0xC96C, 0xD5F4, 0xDDF3, 0xDDF0, 0xC96D, 0xC96E, 0xDDEC, 0xC96F, 0xDDEF, 0xC970, 0xDDE8, 0xC971, 0xC972, 0xD0EE, 0xC973, 0xC974, 0xC975, 0xC976, 0xC8D8, 0xDDEE, 0xC977, 0xC978, 0xDDE9, 0xC979, 0xC97A, 0xDDEA, 0xCBF2, 0xC97B, 0xDDED, 0xC97C, 0xC97D, 0xB1CD, 0xC97E, 0xC980, 0xC981, 0xC982, 0xC983, 0xC984, 0xC0B6, 0xC985, 0xBCBB, 0xDDF1, 0xC986, 0xC987, 0xDDF7, 0xC988, 0xDDF6, 0xDDEB, 0xC989, 0xC98A, 0xC98B, 0xC98C, 0xC98D, 0xC5EE, 0xC98E, 0xC98F, 0xC990, 0xDDFB, 0xC991, 0xC992, 0xC993, 0xC994, 0xC995, 0xC996, 0xC997, 0xC998, 0xC999, 0xC99A, 0xC99B, 0xDEA4, 0xC99C, 0xC99D, 0xDEA3, 0xC99E, 0xC99F, 0xC9A0, 0xCA40, 0xCA41, 0xCA42, 0xCA43, 0xCA44, 0xCA45, 0xCA46, 0xCA47, 0xCA48, 0xDDF8, 0xCA49, 0xCA4A, 0xCA4B, 0xCA4C, 0xC3EF, 0xCA4D, 0xC2FB, 0xCA4E, 0xCA4F, 0xCA50, 0xD5E1, 0xCA51, 0xCA52, 0xCEB5, 0xCA53, 0xCA54, 0xCA55, 0xCA56, 0xDDFD, 0xCA57, 0xB2CC, 0xCA58, 0xCA59, 0xCA5A, 0xCA5B, 0xCA5C, 0xCA5D, 0xCA5E, 0xCA5F, 0xCA60, 0xC4E8, 0xCADF, 0xCA61, 0xCA62, 0xCA63, 0xCA64, 0xCA65, 0xCA66, 0xCA67, 0xCA68, 0xCA69, 0xCA6A, 0xC7BE, 0xDDFA, 0xDDFC, 0xDDFE, 0xDEA2, 0xB0AA, 0xB1CE, 0xCA6B, 0xCA6C, 0xCA6D, 0xCA6E, 0xCA6F, 0xDEAC, 0xCA70, 0xCA71, 0xCA72, 0xCA73, 0xDEA6, 0xBDB6, 0xC8EF, 0xCA74, 0xCA75, 0xCA76, 0xCA77, 0xCA78, 0xCA79, 0xCA7A, 0xCA7B, 0xCA7C, 0xCA7D, 0xCA7E, 0xDEA1, 0xCA80, 0xCA81, 0xDEA5, 0xCA82, 0xCA83, 0xCA84, 0xCA85, 0xDEA9, 0xCA86, 0xCA87, 0xCA88, 0xCA89, 0xCA8A, 0xDEA8, 0xCA8B, 0xCA8C, 0xCA8D, 0xDEA7, 0xCA8E, 0xCA8F, 0xCA90, 0xCA91, 0xCA92, 0xCA93, 0xCA94, 0xCA95, 0xCA96, 0xDEAD, 0xCA97, 0xD4CC, 0xCA98, 0xCA99, 0xCA9A, 0xCA9B, 0xDEB3, 0xDEAA, 0xDEAE, 0xCA9C, 0xCA9D, 0xC0D9, 0xCA9E, 0xCA9F, 0xCAA0, 0xCB40, 0xCB41, 0xB1A1, 0xDEB6, 0xCB42, 0xDEB1, 0xCB43, 0xCB44, 0xCB45, 0xCB46, 0xCB47, 0xCB48, 0xCB49, 0xDEB2, 0xCB4A, 0xCB4B, 0xCB4C, 0xCB4D, 0xCB4E, 0xCB4F, 0xCB50, 0xCB51, 0xCB52, 0xCB53, 0xCB54, 0xD1A6, 0xDEB5, 0xCB55, 0xCB56, 0xCB57, 0xCB58, 0xCB59, 0xCB5A, 0xCB5B, 0xDEAF, 0xCB5C, 0xCB5D, 0xCB5E, 0xDEB0, 0xCB5F, 0xD0BD, 0xCB60, 0xCB61, 0xCB62, 0xDEB4, 0xCAED, 0xDEB9, 0xCB63, 0xCB64, 0xCB65, 0xCB66, 0xCB67, 0xCB68, 0xDEB8, 0xCB69, 0xDEB7, 0xCB6A, 0xCB6B, 0xCB6C, 0xCB6D, 0xCB6E, 0xCB6F, 0xCB70, 0xDEBB, 0xCB71, 0xCB72, 0xCB73, 0xCB74, 0xCB75, 0xCB76, 0xCB77, 0xBDE5, 0xCB78, 0xCB79, 0xCB7A, 0xCB7B, 0xCB7C, 0xB2D8, 0xC3EA, 0xCB7D, 0xCB7E, 0xDEBA, 0xCB80, 0xC5BA, 0xCB81, 0xCB82, 0xCB83, 0xCB84, 0xCB85, 0xCB86, 0xDEBC, 0xCB87, 0xCB88, 0xCB89, 0xCB8A, 0xCB8B, 0xCB8C, 0xCB8D, 0xCCD9, 0xCB8E, 0xCB8F, 0xCB90, 0xCB91, 0xB7AA, 0xCB92, 0xCB93, 0xCB94, 0xCB95, 0xCB96, 0xCB97, 0xCB98, 0xCB99, 0xCB9A, 0xCB9B, 0xCB9C, 0xCB9D, 0xCB9E, 0xCB9F, 0xCBA0, 0xCC40, 0xCC41, 0xD4E5, 0xCC42, 0xCC43, 0xCC44, 0xDEBD, 0xCC45, 0xCC46, 0xCC47, 0xCC48, 0xCC49, 0xDEBF, 0xCC4A, 0xCC4B, 0xCC4C, 0xCC4D, 0xCC4E, 0xCC4F, 0xCC50, 0xCC51, 0xCC52, 0xCC53, 0xCC54, 0xC4A2, 0xCC55, 0xCC56, 0xCC57, 0xCC58, 0xDEC1, 0xCC59, 0xCC5A, 0xCC5B, 0xCC5C, 0xCC5D, 0xCC5E, 0xCC5F, 0xCC60, 0xCC61, 0xCC62, 0xCC63, 0xCC64, 0xCC65, 0xCC66, 0xCC67, 0xCC68, 0xDEBE, 0xCC69, 0xDEC0, 0xCC6A, 0xCC6B, 0xCC6C, 0xCC6D, 0xCC6E, 0xCC6F, 0xCC70, 0xCC71, 0xCC72, 0xCC73, 0xCC74, 0xCC75, 0xCC76, 0xCC77, 0xD5BA, 0xCC78, 0xCC79, 0xCC7A, 0xDEC2, 0xCC7B, 0xCC7C, 0xCC7D, 0xCC7E, 0xCC80, 0xCC81, 0xCC82, 0xCC83, 0xCC84, 0xCC85, 0xCC86, 0xCC87, 0xCC88, 0xCC89, 0xCC8A, 0xCC8B, 0xF2AE, 0xBBA2, 0xC2B2, 0xC5B0, 0xC2C7, 0xCC8C, 0xCC8D, 0xF2AF, 0xCC8E, 0xCC8F, 0xCC90, 0xCC91, 0xCC92, 0xD0E9, 0xCC93, 0xCC94, 0xCC95, 0xD3DD, 0xCC96, 0xCC97, 0xCC98, 0xEBBD, 0xCC99, 0xCC9A, 0xCC9B, 0xCC9C, 0xCC9D, 0xCC9E, 0xCC9F, 0xCCA0, 0xB3E6, 0xF2B0, 0xCD40, 0xF2B1, 0xCD41, 0xCD42, 0xCAAD, 0xCD43, 0xCD44, 0xCD45, 0xCD46, 0xCD47, 0xCD48, 0xCD49, 0xBAE7, 0xF2B3, 0xF2B5, 0xF2B4, 0xCBE4, 0xCFBA, 0xF2B2, 0xCAB4, 0xD2CF, 0xC2EC, 0xCD4A, 0xCD4B, 0xCD4C, 0xCD4D, 0xCD4E, 0xCD4F, 0xCD50, 0xCEC3, 0xF2B8, 0xB0F6, 0xF2B7, 0xCD51, 0xCD52, 0xCD53, 0xCD54, 0xCD55, 0xF2BE, 0xCD56, 0xB2CF, 0xCD57, 0xCD58, 0xCD59, 0xCD5A, 0xCD5B, 0xCD5C, 0xD1C1, 0xF2BA, 0xCD5D, 0xCD5E, 0xCD5F, 0xCD60, 0xCD61, 0xF2BC, 0xD4E9, 0xCD62, 0xCD63, 0xF2BB, 0xF2B6, 0xF2BF, 0xF2BD, 0xCD64, 0xF2B9, 0xCD65, 0xCD66, 0xF2C7, 0xF2C4, 0xF2C6, 0xCD67, 0xCD68, 0xF2CA, 0xF2C2, 0xF2C0, 0xCD69, 0xCD6A, 0xCD6B, 0xF2C5, 0xCD6C, 0xCD6D, 0xCD6E, 0xCD6F, 0xCD70, 0xD6FB, 0xCD71, 0xCD72, 0xCD73, 0xF2C1, 0xCD74, 0xC7F9, 0xC9DF, 0xCD75, 0xF2C8, 0xB9C6, 0xB5B0, 0xCD76, 0xCD77, 0xF2C3, 0xF2C9, 0xF2D0, 0xF2D6, 0xCD78, 0xCD79, 0xBBD7, 0xCD7A, 0xCD7B, 0xCD7C, 0xF2D5, 0xCDDC, 0xCD7D, 0xD6EB, 0xCD7E, 0xCD80, 0xF2D2, 0xF2D4, 0xCD81, 0xCD82, 0xCD83, 0xCD84, 0xB8F2, 0xCD85, 0xCD86, 0xCD87, 0xCD88, 0xF2CB, 0xCD89, 0xCD8A, 0xCD8B, 0xF2CE, 0xC2F9, 0xCD8C, 0xD5DD, 0xF2CC, 0xF2CD, 0xF2CF, 0xF2D3, 0xCD8D, 0xCD8E, 0xCD8F, 0xF2D9, 0xD3BC, 0xCD90, 0xCD91, 0xCD92, 0xCD93, 0xB6EA, 0xCD94, 0xCAF1, 0xCD95, 0xB7E4, 0xF2D7, 0xCD96, 0xCD97, 0xCD98, 0xF2D8, 0xF2DA, 0xF2DD, 0xF2DB, 0xCD99, 0xCD9A, 0xF2DC, 0xCD9B, 0xCD9C, 0xCD9D, 0xCD9E, 0xD1D1, 0xF2D1, 0xCD9F, 0xCDC9, 0xCDA0, 0xCECF, 0xD6A9, 0xCE40, 0xF2E3, 0xCE41, 0xC3DB, 0xCE42, 0xF2E0, 0xCE43, 0xCE44, 0xC0AF, 0xF2EC, 0xF2DE, 0xCE45, 0xF2E1, 0xCE46, 0xCE47, 0xCE48, 0xF2E8, 0xCE49, 0xCE4A, 0xCE4B, 0xCE4C, 0xF2E2, 0xCE4D, 0xCE4E, 0xF2E7, 0xCE4F, 0xCE50, 0xF2E6, 0xCE51, 0xCE52, 0xF2E9, 0xCE53, 0xCE54, 0xCE55, 0xF2DF, 0xCE56, 0xCE57, 0xF2E4, 0xF2EA, 0xCE58, 0xCE59, 0xCE5A, 0xCE5B, 0xCE5C, 0xCE5D, 0xCE5E, 0xD3AC, 0xF2E5, 0xB2F5, 0xCE5F, 0xCE60, 0xF2F2, 0xCE61, 0xD0AB, 0xCE62, 0xCE63, 0xCE64, 0xCE65, 0xF2F5, 0xCE66, 0xCE67, 0xCE68, 0xBBC8, 0xCE69, 0xF2F9, 0xCE6A, 0xCE6B, 0xCE6C, 0xCE6D, 0xCE6E, 0xCE6F, 0xF2F0, 0xCE70, 0xCE71, 0xF2F6, 0xF2F8, 0xF2FA, 0xCE72, 0xCE73, 0xCE74, 0xCE75, 0xCE76, 0xCE77, 0xCE78, 0xCE79, 0xF2F3, 0xCE7A, 0xF2F1, 0xCE7B, 0xCE7C, 0xCE7D, 0xBAFB, 0xCE7E, 0xB5FB, 0xCE80, 0xCE81, 0xCE82, 0xCE83, 0xF2EF, 0xF2F7, 0xF2ED, 0xF2EE, 0xCE84, 0xCE85, 0xCE86, 0xF2EB, 0xF3A6, 0xCE87, 0xF3A3, 0xCE88, 0xCE89, 0xF3A2, 0xCE8A, 0xCE8B, 0xF2F4, 0xCE8C, 0xC8DA, 0xCE8D, 0xCE8E, 0xCE8F, 0xCE90, 0xCE91, 0xF2FB, 0xCE92, 0xCE93, 0xCE94, 0xF3A5, 0xCE95, 0xCE96, 0xCE97, 0xCE98, 0xCE99, 0xCE9A, 0xCE9B, 0xC3F8, 0xCE9C, 0xCE9D, 0xCE9E, 0xCE9F, 0xCEA0, 0xCF40, 0xCF41, 0xCF42, 0xF2FD, 0xCF43, 0xCF44, 0xF3A7, 0xF3A9, 0xF3A4, 0xCF45, 0xF2FC, 0xCF46, 0xCF47, 0xCF48, 0xF3AB, 0xCF49, 0xF3AA, 0xCF4A, 0xCF4B, 0xCF4C, 0xCF4D, 0xC2DD, 0xCF4E, 0xCF4F, 0xF3AE, 0xCF50, 0xCF51, 0xF3B0, 0xCF52, 0xCF53, 0xCF54, 0xCF55, 0xCF56, 0xF3A1, 0xCF57, 0xCF58, 0xCF59, 0xF3B1, 0xF3AC, 0xCF5A, 0xCF5B, 0xCF5C, 0xCF5D, 0xCF5E, 0xF3AF, 0xF2FE, 0xF3AD, 0xCF5F, 0xCF60, 0xCF61, 0xCF62, 0xCF63, 0xCF64, 0xCF65, 0xF3B2, 0xCF66, 0xCF67, 0xCF68, 0xCF69, 0xF3B4, 0xCF6A, 0xCF6B, 0xCF6C, 0xCF6D, 0xF3A8, 0xCF6E, 0xCF6F, 0xCF70, 0xCF71, 0xF3B3, 0xCF72, 0xCF73, 0xCF74, 0xF3B5, 0xCF75, 0xCF76, 0xCF77, 0xCF78, 0xCF79, 0xCF7A, 0xCF7B, 0xCF7C, 0xCF7D, 0xCF7E, 0xD0B7, 0xCF80, 0xCF81, 0xCF82, 0xCF83, 0xF3B8, 0xCF84, 0xCF85, 0xCF86, 0xCF87, 0xD9F9, 0xCF88, 0xCF89, 0xCF8A, 0xCF8B, 0xCF8C, 0xCF8D, 0xF3B9, 0xCF8E, 0xCF8F, 0xCF90, 0xCF91, 0xCF92, 0xCF93, 0xCF94, 0xCF95, 0xF3B7, 0xCF96, 0xC8E4, 0xF3B6, 0xCF97, 0xCF98, 0xCF99, 0xCF9A, 0xF3BA, 0xCF9B, 0xCF9C, 0xCF9D, 0xCF9E, 0xCF9F, 0xF3BB, 0xB4C0, 0xCFA0, 0xD040, 0xD041, 0xD042, 0xD043, 0xD044, 0xD045, 0xD046, 0xD047, 0xD048, 0xD049, 0xD04A, 0xD04B, 0xD04C, 0xD04D, 0xEEC3, 0xD04E, 0xD04F, 0xD050, 0xD051, 0xD052, 0xD053, 0xF3BC, 0xD054, 0xD055, 0xF3BD, 0xD056, 0xD057, 0xD058, 0xD1AA, 0xD059, 0xD05A, 0xD05B, 0xF4AC, 0xD0C6, 0xD05C, 0xD05D, 0xD05E, 0xD05F, 0xD060, 0xD061, 0xD0D0, 0xD1DC, 0xD062, 0xD063, 0xD064, 0xD065, 0xD066, 0xD067, 0xCFCE, 0xD068, 0xD069, 0xBDD6, 0xD06A, 0xD1C3, 0xD06B, 0xD06C, 0xD06D, 0xD06E, 0xD06F, 0xD070, 0xD071, 0xBAE2, 0xE1E9, 0xD2C2, 0xF1C2, 0xB2B9, 0xD072, 0xD073, 0xB1ED, 0xF1C3, 0xD074, 0xC9C0, 0xB3C4, 0xD075, 0xD9F2, 0xD076, 0xCBA5, 0xD077, 0xF1C4, 0xD078, 0xD079, 0xD07A, 0xD07B, 0xD6D4, 0xD07C, 0xD07D, 0xD07E, 0xD080, 0xD081, 0xF1C5, 0xF4C0, 0xF1C6, 0xD082, 0xD4AC, 0xF1C7, 0xD083, 0xB0C0, 0xF4C1, 0xD084, 0xD085, 0xF4C2, 0xD086, 0xD087, 0xB4FC, 0xD088, 0xC5DB, 0xD089, 0xD08A, 0xD08B, 0xD08C, 0xCCBB, 0xD08D, 0xD08E, 0xD08F, 0xD0E4, 0xD090, 0xD091, 0xD092, 0xD093, 0xD094, 0xCDE0, 0xD095, 0xD096, 0xD097, 0xD098, 0xD099, 0xF1C8, 0xD09A, 0xD9F3, 0xD09B, 0xD09C, 0xD09D, 0xD09E, 0xD09F, 0xD0A0, 0xB1BB, 0xD140, 0xCFAE, 0xD141, 0xD142, 0xD143, 0xB8A4, 0xD144, 0xD145, 0xD146, 0xD147, 0xD148, 0xF1CA, 0xD149, 0xD14A, 0xD14B, 0xD14C, 0xF1CB, 0xD14D, 0xD14E, 0xD14F, 0xD150, 0xB2C3, 0xC1D1, 0xD151, 0xD152, 0xD7B0, 0xF1C9, 0xD153, 0xD154, 0xF1CC, 0xD155, 0xD156, 0xD157, 0xD158, 0xF1CE, 0xD159, 0xD15A, 0xD15B, 0xD9F6, 0xD15C, 0xD2E1, 0xD4A3, 0xD15D, 0xD15E, 0xF4C3, 0xC8B9, 0xD15F, 0xD160, 0xD161, 0xD162, 0xD163, 0xF4C4, 0xD164, 0xD165, 0xF1CD, 0xF1CF, 0xBFE3, 0xF1D0, 0xD166, 0xD167, 0xF1D4, 0xD168, 0xD169, 0xD16A, 0xD16B, 0xD16C, 0xD16D, 0xD16E, 0xF1D6, 0xF1D1, 0xD16F, 0xC9D1, 0xC5E1, 0xD170, 0xD171, 0xD172, 0xC2E3, 0xB9FC, 0xD173, 0xD174, 0xF1D3, 0xD175, 0xF1D5, 0xD176, 0xD177, 0xD178, 0xB9D3, 0xD179, 0xD17A, 0xD17B, 0xD17C, 0xD17D, 0xD17E, 0xD180, 0xF1DB, 0xD181, 0xD182, 0xD183, 0xD184, 0xD185, 0xBAD6, 0xD186, 0xB0FD, 0xF1D9, 0xD187, 0xD188, 0xD189, 0xD18A, 0xD18B, 0xF1D8, 0xF1D2, 0xF1DA, 0xD18C, 0xD18D, 0xD18E, 0xD18F, 0xD190, 0xF1D7, 0xD191, 0xD192, 0xD193, 0xC8EC, 0xD194, 0xD195, 0xD196, 0xD197, 0xCDCA, 0xF1DD, 0xD198, 0xD199, 0xD19A, 0xD19B, 0xE5BD, 0xD19C, 0xD19D, 0xD19E, 0xF1DC, 0xD19F, 0xF1DE, 0xD1A0, 0xD240, 0xD241, 0xD242, 0xD243, 0xD244, 0xD245, 0xD246, 0xD247, 0xD248, 0xF1DF, 0xD249, 0xD24A, 0xCFE5, 0xD24B, 0xD24C, 0xD24D, 0xD24E, 0xD24F, 0xD250, 0xD251, 0xD252, 0xD253, 0xD254, 0xD255, 0xD256, 0xD257, 0xD258, 0xD259, 0xD25A, 0xD25B, 0xD25C, 0xD25D, 0xD25E, 0xD25F, 0xD260, 0xD261, 0xD262, 0xD263, 0xF4C5, 0xBDF3, 0xD264, 0xD265, 0xD266, 0xD267, 0xD268, 0xD269, 0xF1E0, 0xD26A, 0xD26B, 0xD26C, 0xD26D, 0xD26E, 0xD26F, 0xD270, 0xD271, 0xD272, 0xD273, 0xD274, 0xD275, 0xD276, 0xD277, 0xD278, 0xD279, 0xD27A, 0xD27B, 0xD27C, 0xD27D, 0xF1E1, 0xD27E, 0xD280, 0xD281, 0xCEF7, 0xD282, 0xD2AA, 0xD283, 0xF1FB, 0xD284, 0xD285, 0xB8B2, 0xD286, 0xD287, 0xD288, 0xD289, 0xD28A, 0xD28B, 0xD28C, 0xD28D, 0xD28E, 0xD28F, 0xD290, 0xD291, 0xD292, 0xD293, 0xD294, 0xD295, 0xD296, 0xD297, 0xD298, 0xD299, 0xD29A, 0xD29B, 0xD29C, 0xD29D, 0xD29E, 0xD29F, 0xD2A0, 0xD340, 0xD341, 0xD342, 0xD343, 0xD344, 0xD345, 0xD346, 0xD347, 0xD348, 0xD349, 0xD34A, 0xD34B, 0xD34C, 0xD34D, 0xD34E, 0xD34F, 0xD350, 0xD351, 0xD352, 0xD353, 0xD354, 0xD355, 0xD356, 0xD357, 0xD358, 0xD359, 0xD35A, 0xD35B, 0xD35C, 0xD35D, 0xD35E, 0xBCFB, 0xB9DB, 0xD35F, 0xB9E6, 0xC3D9, 0xCAD3, 0xEAE8, 0xC0C0, 0xBEF5, 0xEAE9, 0xEAEA, 0xEAEB, 0xD360, 0xEAEC, 0xEAED, 0xEAEE, 0xEAEF, 0xBDC7, 0xD361, 0xD362, 0xD363, 0xF5FB, 0xD364, 0xD365, 0xD366, 0xF5FD, 0xD367, 0xF5FE, 0xD368, 0xF5FC, 0xD369, 0xD36A, 0xD36B, 0xD36C, 0xBDE2, 0xD36D, 0xF6A1, 0xB4A5, 0xD36E, 0xD36F, 0xD370, 0xD371, 0xF6A2, 0xD372, 0xD373, 0xD374, 0xF6A3, 0xD375, 0xD376, 0xD377, 0xECB2, 0xD378, 0xD379, 0xD37A, 0xD37B, 0xD37C, 0xD37D, 0xD37E, 0xD380, 0xD381, 0xD382, 0xD383, 0xD384, 0xD1D4, 0xD385, 0xD386, 0xD387, 0xD388, 0xD389, 0xD38A, 0xD9EA, 0xD38B, 0xD38C, 0xD38D, 0xD38E, 0xD38F, 0xD390, 0xD391, 0xD392, 0xD393, 0xD394, 0xD395, 0xD396, 0xD397, 0xD398, 0xD399, 0xD39A, 0xD39B, 0xD39C, 0xD39D, 0xD39E, 0xD39F, 0xD3A0, 0xD440, 0xD441, 0xD442, 0xD443, 0xD444, 0xD445, 0xD446, 0xD447, 0xD448, 0xD449, 0xD44A, 0xD44B, 0xD44C, 0xD44D, 0xD44E, 0xD44F, 0xD450, 0xD451, 0xD452, 0xD453, 0xD454, 0xD455, 0xD456, 0xD457, 0xD458, 0xD459, 0xD45A, 0xD45B, 0xD45C, 0xD45D, 0xD45E, 0xD45F, 0xF6A4, 0xD460, 0xD461, 0xD462, 0xD463, 0xD464, 0xD465, 0xD466, 0xD467, 0xD468, 0xEEBA, 0xD469, 0xD46A, 0xD46B, 0xD46C, 0xD46D, 0xD46E, 0xD46F, 0xD470, 0xD471, 0xD472, 0xD473, 0xD474, 0xD475, 0xD476, 0xD477, 0xD478, 0xD479, 0xD47A, 0xD47B, 0xD47C, 0xD47D, 0xD47E, 0xD480, 0xD481, 0xD482, 0xD483, 0xD484, 0xD485, 0xD486, 0xD487, 0xD488, 0xD489, 0xD48A, 0xD48B, 0xD48C, 0xD48D, 0xD48E, 0xD48F, 0xD490, 0xD491, 0xD492, 0xD493, 0xD494, 0xD495, 0xD496, 0xD497, 0xD498, 0xD499, 0xD5B2, 0xD49A, 0xD49B, 0xD49C, 0xD49D, 0xD49E, 0xD49F, 0xD4A0, 0xD540, 0xD541, 0xD542, 0xD543, 0xD544, 0xD545, 0xD546, 0xD547, 0xD3FE, 0xCCDC, 0xD548, 0xD549, 0xD54A, 0xD54B, 0xD54C, 0xD54D, 0xD54E, 0xD54F, 0xCAC4, 0xD550, 0xD551, 0xD552, 0xD553, 0xD554, 0xD555, 0xD556, 0xD557, 0xD558, 0xD559, 0xD55A, 0xD55B, 0xD55C, 0xD55D, 0xD55E, 0xD55F, 0xD560, 0xD561, 0xD562, 0xD563, 0xD564, 0xD565, 0xD566, 0xD567, 0xD568, 0xD569, 0xD56A, 0xD56B, 0xD56C, 0xD56D, 0xD56E, 0xD56F, 0xD570, 0xD571, 0xD572, 0xD573, 0xD574, 0xD575, 0xD576, 0xD577, 0xD578, 0xD579, 0xD57A, 0xD57B, 0xD57C, 0xD57D, 0xD57E, 0xD580, 0xD581, 0xD582, 0xD583, 0xD584, 0xD585, 0xD586, 0xD587, 0xD588, 0xD589, 0xD58A, 0xD58B, 0xD58C, 0xD58D, 0xD58E, 0xD58F, 0xD590, 0xD591, 0xD592, 0xD593, 0xD594, 0xD595, 0xD596, 0xD597, 0xD598, 0xD599, 0xD59A, 0xD59B, 0xD59C, 0xD59D, 0xD59E, 0xD59F, 0xD5A0, 0xD640, 0xD641, 0xD642, 0xD643, 0xD644, 0xD645, 0xD646, 0xD647, 0xD648, 0xD649, 0xD64A, 0xD64B, 0xD64C, 0xD64D, 0xD64E, 0xD64F, 0xD650, 0xD651, 0xD652, 0xD653, 0xD654, 0xD655, 0xD656, 0xD657, 0xD658, 0xD659, 0xD65A, 0xD65B, 0xD65C, 0xD65D, 0xD65E, 0xD65F, 0xD660, 0xD661, 0xD662, 0xE5C0, 0xD663, 0xD664, 0xD665, 0xD666, 0xD667, 0xD668, 0xD669, 0xD66A, 0xD66B, 0xD66C, 0xD66D, 0xD66E, 0xD66F, 0xD670, 0xD671, 0xD672, 0xD673, 0xD674, 0xD675, 0xD676, 0xD677, 0xD678, 0xD679, 0xD67A, 0xD67B, 0xD67C, 0xD67D, 0xD67E, 0xD680, 0xD681, 0xF6A5, 0xD682, 0xD683, 0xD684, 0xD685, 0xD686, 0xD687, 0xD688, 0xD689, 0xD68A, 0xD68B, 0xD68C, 0xD68D, 0xD68E, 0xD68F, 0xD690, 0xD691, 0xD692, 0xD693, 0xD694, 0xD695, 0xD696, 0xD697, 0xD698, 0xD699, 0xD69A, 0xD69B, 0xD69C, 0xD69D, 0xD69E, 0xD69F, 0xD6A0, 0xD740, 0xD741, 0xD742, 0xD743, 0xD744, 0xD745, 0xD746, 0xD747, 0xD748, 0xD749, 0xD74A, 0xD74B, 0xD74C, 0xD74D, 0xD74E, 0xD74F, 0xD750, 0xD751, 0xD752, 0xD753, 0xD754, 0xD755, 0xD756, 0xD757, 0xD758, 0xD759, 0xD75A, 0xD75B, 0xD75C, 0xD75D, 0xD75E, 0xD75F, 0xBEAF, 0xD760, 0xD761, 0xD762, 0xD763, 0xD764, 0xC6A9, 0xD765, 0xD766, 0xD767, 0xD768, 0xD769, 0xD76A, 0xD76B, 0xD76C, 0xD76D, 0xD76E, 0xD76F, 0xD770, 0xD771, 0xD772, 0xD773, 0xD774, 0xD775, 0xD776, 0xD777, 0xD778, 0xD779, 0xD77A, 0xD77B, 0xD77C, 0xD77D, 0xD77E, 0xD780, 0xD781, 0xD782, 0xD783, 0xD784, 0xD785, 0xD786, 0xD787, 0xD788, 0xD789, 0xD78A, 0xD78B, 0xD78C, 0xD78D, 0xD78E, 0xD78F, 0xD790, 0xD791, 0xD792, 0xD793, 0xD794, 0xD795, 0xD796, 0xD797, 0xD798, 0xDAA5, 0xBCC6, 0xB6A9, 0xB8BC, 0xC8CF, 0xBCA5, 0xDAA6, 0xDAA7, 0xCCD6, 0xC8C3, 0xDAA8, 0xC6FD, 0xD799, 0xD1B5, 0xD2E9, 0xD1B6, 0xBCC7, 0xD79A, 0xBDB2, 0xBBE4, 0xDAA9, 0xDAAA, 0xD1C8, 0xDAAB, 0xD0ED, 0xB6EF, 0xC2DB, 0xD79B, 0xCBCF, 0xB7ED, 0xC9E8, 0xB7C3, 0xBEF7, 0xD6A4, 0xDAAC, 0xDAAD, 0xC6C0, 0xD7E7, 0xCAB6, 0xD79C, 0xD5A9, 0xCBDF, 0xD5EF, 0xDAAE, 0xD6DF, 0xB4CA, 0xDAB0, 0xDAAF, 0xD79D, 0xD2EB, 0xDAB1, 0xDAB2, 0xDAB3, 0xCAD4, 0xDAB4, 0xCAAB, 0xDAB5, 0xDAB6, 0xB3CF, 0xD6EF, 0xDAB7, 0xBBB0, 0xB5AE, 0xDAB8, 0xDAB9, 0xB9EE, 0xD1AF, 0xD2E8, 0xDABA, 0xB8C3, 0xCFEA, 0xB2EF, 0xDABB, 0xDABC, 0xD79E, 0xBDEB, 0xCEDC, 0xD3EF, 0xDABD, 0xCEF3, 0xDABE, 0xD3D5, 0xBBE5, 0xDABF, 0xCBB5, 0xCBD0, 0xDAC0, 0xC7EB, 0xD6EE, 0xDAC1, 0xC5B5, 0xB6C1, 0xDAC2, 0xB7CC, 0xBFCE, 0xDAC3, 0xDAC4, 0xCBAD, 0xDAC5, 0xB5F7, 0xDAC6, 0xC1C2, 0xD7BB, 0xDAC7, 0xCCB8, 0xD79F, 0xD2EA, 0xC4B1, 0xDAC8, 0xB5FD, 0xBBD1, 0xDAC9, 0xD0B3, 0xDACA, 0xDACB, 0xCEBD, 0xDACC, 0xDACD, 0xDACE, 0xB2F7, 0xDAD1, 0xDACF, 0xD1E8, 0xDAD0, 0xC3D5, 0xDAD2, 0xD7A0, 0xDAD3, 0xDAD4, 0xDAD5, 0xD0BB, 0xD2A5, 0xB0F9, 0xDAD6, 0xC7AB, 0xDAD7, 0xBDF7, 0xC3A1, 0xDAD8, 0xDAD9, 0xC3FD, 0xCCB7, 0xDADA, 0xDADB, 0xC0BE, 0xC6D7, 0xDADC, 0xDADD, 0xC7B4, 0xDADE, 0xDADF, 0xB9C8, 0xD840, 0xD841, 0xD842, 0xD843, 0xD844, 0xD845, 0xD846, 0xD847, 0xD848, 0xBBED, 0xD849, 0xD84A, 0xD84B, 0xD84C, 0xB6B9, 0xF4F8, 0xD84D, 0xF4F9, 0xD84E, 0xD84F, 0xCDE3, 0xD850, 0xD851, 0xD852, 0xD853, 0xD854, 0xD855, 0xD856, 0xD857, 0xF5B9, 0xD858, 0xD859, 0xD85A, 0xD85B, 0xEBE0, 0xD85C, 0xD85D, 0xD85E, 0xD85F, 0xD860, 0xD861, 0xCFF3, 0xBBBF, 0xD862, 0xD863, 0xD864, 0xD865, 0xD866, 0xD867, 0xD868, 0xBAC0, 0xD4A5, 0xD869, 0xD86A, 0xD86B, 0xD86C, 0xD86D, 0xD86E, 0xD86F, 0xE1D9, 0xD870, 0xD871, 0xD872, 0xD873, 0xF5F4, 0xB1AA, 0xB2F2, 0xD874, 0xD875, 0xD876, 0xD877, 0xD878, 0xD879, 0xD87A, 0xF5F5, 0xD87B, 0xD87C, 0xF5F7, 0xD87D, 0xD87E, 0xD880, 0xBAD1, 0xF5F6, 0xD881, 0xC3B2, 0xD882, 0xD883, 0xD884, 0xD885, 0xD886, 0xD887, 0xD888, 0xF5F9, 0xD889, 0xD88A, 0xD88B, 0xF5F8, 0xD88C, 0xD88D, 0xD88E, 0xD88F, 0xD890, 0xD891, 0xD892, 0xD893, 0xD894, 0xD895, 0xD896, 0xD897, 0xD898, 0xD899, 0xD89A, 0xD89B, 0xD89C, 0xD89D, 0xD89E, 0xD89F, 0xD8A0, 0xD940, 0xD941, 0xD942, 0xD943, 0xD944, 0xD945, 0xD946, 0xD947, 0xD948, 0xD949, 0xD94A, 0xD94B, 0xD94C, 0xD94D, 0xD94E, 0xD94F, 0xD950, 0xD951, 0xD952, 0xD953, 0xD954, 0xD955, 0xD956, 0xD957, 0xD958, 0xD959, 0xD95A, 0xD95B, 0xD95C, 0xD95D, 0xD95E, 0xD95F, 0xD960, 0xD961, 0xD962, 0xD963, 0xD964, 0xD965, 0xD966, 0xD967, 0xD968, 0xD969, 0xD96A, 0xD96B, 0xD96C, 0xD96D, 0xD96E, 0xD96F, 0xD970, 0xD971, 0xD972, 0xD973, 0xD974, 0xD975, 0xD976, 0xD977, 0xD978, 0xD979, 0xD97A, 0xD97B, 0xD97C, 0xD97D, 0xD97E, 0xD980, 0xD981, 0xD982, 0xD983, 0xD984, 0xD985, 0xD986, 0xD987, 0xD988, 0xD989, 0xD98A, 0xD98B, 0xD98C, 0xD98D, 0xD98E, 0xD98F, 0xD990, 0xD991, 0xD992, 0xD993, 0xD994, 0xD995, 0xD996, 0xD997, 0xD998, 0xD999, 0xD99A, 0xD99B, 0xD99C, 0xD99D, 0xD99E, 0xD99F, 0xD9A0, 0xDA40, 0xDA41, 0xDA42, 0xDA43, 0xDA44, 0xDA45, 0xDA46, 0xDA47, 0xDA48, 0xDA49, 0xDA4A, 0xDA4B, 0xDA4C, 0xDA4D, 0xDA4E, 0xB1B4, 0xD5EA, 0xB8BA, 0xDA4F, 0xB9B1, 0xB2C6, 0xD4F0, 0xCFCD, 0xB0DC, 0xD5CB, 0xBBF5, 0xD6CA, 0xB7B7, 0xCCB0, 0xC6B6, 0xB1E1, 0xB9BA, 0xD6FC, 0xB9E1, 0xB7A1, 0xBCFA, 0xEADA, 0xEADB, 0xCCF9, 0xB9F3, 0xEADC, 0xB4FB, 0xC3B3, 0xB7D1, 0xBAD8, 0xEADD, 0xD4F4, 0xEADE, 0xBCD6, 0xBBDF, 0xEADF, 0xC1DE, 0xC2B8, 0xD4DF, 0xD7CA, 0xEAE0, 0xEAE1, 0xEAE4, 0xEAE2, 0xEAE3, 0xC9DE, 0xB8B3, 0xB6C4, 0xEAE5, 0xCAEA, 0xC9CD, 0xB4CD, 0xDA50, 0xDA51, 0xE2D9, 0xC5E2, 0xEAE6, 0xC0B5, 0xDA52, 0xD7B8, 0xEAE7, 0xD7AC, 0xC8FC, 0xD8D3, 0xD8CD, 0xD4DE, 0xDA53, 0xD4F9, 0xC9C4, 0xD3AE, 0xB8D3, 0xB3E0, 0xDA54, 0xC9E2, 0xF4F6, 0xDA55, 0xDA56, 0xDA57, 0xBAD5, 0xDA58, 0xF4F7, 0xDA59, 0xDA5A, 0xD7DF, 0xDA5B, 0xDA5C, 0xF4F1, 0xB8B0, 0xD5D4, 0xB8CF, 0xC6F0, 0xDA5D, 0xDA5E, 0xDA5F, 0xDA60, 0xDA61, 0xDA62, 0xDA63, 0xDA64, 0xDA65, 0xB3C3, 0xDA66, 0xDA67, 0xF4F2, 0xB3AC, 0xDA68, 0xDA69, 0xDA6A, 0xDA6B, 0xD4BD, 0xC7F7, 0xDA6C, 0xDA6D, 0xDA6E, 0xDA6F, 0xDA70, 0xF4F4, 0xDA71, 0xDA72, 0xF4F3, 0xDA73, 0xDA74, 0xDA75, 0xDA76, 0xDA77, 0xDA78, 0xDA79, 0xDA7A, 0xDA7B, 0xDA7C, 0xCCCB, 0xDA7D, 0xDA7E, 0xDA80, 0xC8A4, 0xDA81, 0xDA82, 0xDA83, 0xDA84, 0xDA85, 0xDA86, 0xDA87, 0xDA88, 0xDA89, 0xDA8A, 0xDA8B, 0xDA8C, 0xDA8D, 0xF4F5, 0xDA8E, 0xD7E3, 0xC5BF, 0xF5C0, 0xDA8F, 0xDA90, 0xF5BB, 0xDA91, 0xF5C3, 0xDA92, 0xF5C2, 0xDA93, 0xD6BA, 0xF5C1, 0xDA94, 0xDA95, 0xDA96, 0xD4BE, 0xF5C4, 0xDA97, 0xF5CC, 0xDA98, 0xDA99, 0xDA9A, 0xDA9B, 0xB0CF, 0xB5F8, 0xDA9C, 0xF5C9, 0xF5CA, 0xDA9D, 0xC5DC, 0xDA9E, 0xDA9F, 0xDAA0, 0xDB40, 0xF5C5, 0xF5C6, 0xDB41, 0xDB42, 0xF5C7, 0xF5CB, 0xDB43, 0xBEE0, 0xF5C8, 0xB8FA, 0xDB44, 0xDB45, 0xDB46, 0xF5D0, 0xF5D3, 0xDB47, 0xDB48, 0xDB49, 0xBFE7, 0xDB4A, 0xB9F2, 0xF5BC, 0xF5CD, 0xDB4B, 0xDB4C, 0xC2B7, 0xDB4D, 0xDB4E, 0xDB4F, 0xCCF8, 0xDB50, 0xBCF9, 0xDB51, 0xF5CE, 0xF5CF, 0xF5D1, 0xB6E5, 0xF5D2, 0xDB52, 0xF5D5, 0xDB53, 0xDB54, 0xDB55, 0xDB56, 0xDB57, 0xDB58, 0xDB59, 0xF5BD, 0xDB5A, 0xDB5B, 0xDB5C, 0xF5D4, 0xD3BB, 0xDB5D, 0xB3EC, 0xDB5E, 0xDB5F, 0xCCA4, 0xDB60, 0xDB61, 0xDB62, 0xDB63, 0xF5D6, 0xDB64, 0xDB65, 0xDB66, 0xDB67, 0xDB68, 0xDB69, 0xDB6A, 0xDB6B, 0xF5D7, 0xBEE1, 0xF5D8, 0xDB6C, 0xDB6D, 0xCCDF, 0xF5DB, 0xDB6E, 0xDB6F, 0xDB70, 0xDB71, 0xDB72, 0xB2C8, 0xD7D9, 0xDB73, 0xF5D9, 0xDB74, 0xF5DA, 0xF5DC, 0xDB75, 0xF5E2, 0xDB76, 0xDB77, 0xDB78, 0xF5E0, 0xDB79, 0xDB7A, 0xDB7B, 0xF5DF, 0xF5DD, 0xDB7C, 0xDB7D, 0xF5E1, 0xDB7E, 0xDB80, 0xF5DE, 0xF5E4, 0xF5E5, 0xDB81, 0xCCE3, 0xDB82, 0xDB83, 0xE5BF, 0xB5B8, 0xF5E3, 0xF5E8, 0xCCA3, 0xDB84, 0xDB85, 0xDB86, 0xDB87, 0xDB88, 0xF5E6, 0xF5E7, 0xDB89, 0xDB8A, 0xDB8B, 0xDB8C, 0xDB8D, 0xDB8E, 0xF5BE, 0xDB8F, 0xDB90, 0xDB91, 0xDB92, 0xDB93, 0xDB94, 0xDB95, 0xDB96, 0xDB97, 0xDB98, 0xDB99, 0xDB9A, 0xB1C4, 0xDB9B, 0xDB9C, 0xF5BF, 0xDB9D, 0xDB9E, 0xB5C5, 0xB2E4, 0xDB9F, 0xF5EC, 0xF5E9, 0xDBA0, 0xB6D7, 0xDC40, 0xF5ED, 0xDC41, 0xF5EA, 0xDC42, 0xDC43, 0xDC44, 0xDC45, 0xDC46, 0xF5EB, 0xDC47, 0xDC48, 0xB4DA, 0xDC49, 0xD4EA, 0xDC4A, 0xDC4B, 0xDC4C, 0xF5EE, 0xDC4D, 0xB3F9, 0xDC4E, 0xDC4F, 0xDC50, 0xDC51, 0xDC52, 0xDC53, 0xDC54, 0xF5EF, 0xF5F1, 0xDC55, 0xDC56, 0xDC57, 0xF5F0, 0xDC58, 0xDC59, 0xDC5A, 0xDC5B, 0xDC5C, 0xDC5D, 0xDC5E, 0xF5F2, 0xDC5F, 0xF5F3, 0xDC60, 0xDC61, 0xDC62, 0xDC63, 0xDC64, 0xDC65, 0xDC66, 0xDC67, 0xDC68, 0xDC69, 0xDC6A, 0xDC6B, 0xC9ED, 0xB9AA, 0xDC6C, 0xDC6D, 0xC7FB, 0xDC6E, 0xDC6F, 0xB6E3, 0xDC70, 0xDC71, 0xDC72, 0xDC73, 0xDC74, 0xDC75, 0xDC76, 0xCCC9, 0xDC77, 0xDC78, 0xDC79, 0xDC7A, 0xDC7B, 0xDC7C, 0xDC7D, 0xDC7E, 0xDC80, 0xDC81, 0xDC82, 0xDC83, 0xDC84, 0xDC85, 0xDC86, 0xDC87, 0xDC88, 0xDC89, 0xDC8A, 0xEAA6, 0xDC8B, 0xDC8C, 0xDC8D, 0xDC8E, 0xDC8F, 0xDC90, 0xDC91, 0xDC92, 0xDC93, 0xDC94, 0xDC95, 0xDC96, 0xDC97, 0xDC98, 0xDC99, 0xDC9A, 0xDC9B, 0xDC9C, 0xDC9D, 0xDC9E, 0xDC9F, 0xDCA0, 0xDD40, 0xDD41, 0xDD42, 0xDD43, 0xDD44, 0xDD45, 0xDD46, 0xDD47, 0xDD48, 0xDD49, 0xDD4A, 0xDD4B, 0xDD4C, 0xDD4D, 0xDD4E, 0xDD4F, 0xDD50, 0xDD51, 0xDD52, 0xDD53, 0xDD54, 0xDD55, 0xDD56, 0xDD57, 0xDD58, 0xDD59, 0xDD5A, 0xDD5B, 0xDD5C, 0xDD5D, 0xDD5E, 0xDD5F, 0xDD60, 0xDD61, 0xDD62, 0xDD63, 0xDD64, 0xDD65, 0xDD66, 0xDD67, 0xDD68, 0xDD69, 0xDD6A, 0xDD6B, 0xDD6C, 0xDD6D, 0xDD6E, 0xDD6F, 0xDD70, 0xDD71, 0xDD72, 0xDD73, 0xDD74, 0xDD75, 0xDD76, 0xDD77, 0xDD78, 0xDD79, 0xDD7A, 0xDD7B, 0xDD7C, 0xDD7D, 0xDD7E, 0xDD80, 0xDD81, 0xDD82, 0xDD83, 0xDD84, 0xDD85, 0xDD86, 0xDD87, 0xDD88, 0xDD89, 0xDD8A, 0xDD8B, 0xDD8C, 0xDD8D, 0xDD8E, 0xDD8F, 0xDD90, 0xDD91, 0xDD92, 0xDD93, 0xDD94, 0xDD95, 0xDD96, 0xDD97, 0xDD98, 0xDD99, 0xDD9A, 0xDD9B, 0xDD9C, 0xDD9D, 0xDD9E, 0xDD9F, 0xDDA0, 0xDE40, 0xDE41, 0xDE42, 0xDE43, 0xDE44, 0xDE45, 0xDE46, 0xDE47, 0xDE48, 0xDE49, 0xDE4A, 0xDE4B, 0xDE4C, 0xDE4D, 0xDE4E, 0xDE4F, 0xDE50, 0xDE51, 0xDE52, 0xDE53, 0xDE54, 0xDE55, 0xDE56, 0xDE57, 0xDE58, 0xDE59, 0xDE5A, 0xDE5B, 0xDE5C, 0xDE5D, 0xDE5E, 0xDE5F, 0xDE60, 0xB3B5, 0xD4FE, 0xB9EC, 0xD0F9, 0xDE61, 0xE9ED, 0xD7AA, 0xE9EE, 0xC2D6, 0xC8ED, 0xBAE4, 0xE9EF, 0xE9F0, 0xE9F1, 0xD6E1, 0xE9F2, 0xE9F3, 0xE9F5, 0xE9F4, 0xE9F6, 0xE9F7, 0xC7E1, 0xE9F8, 0xD4D8, 0xE9F9, 0xBDCE, 0xDE62, 0xE9FA, 0xE9FB, 0xBDCF, 0xE9FC, 0xB8A8, 0xC1BE, 0xE9FD, 0xB1B2, 0xBBD4, 0xB9F5, 0xE9FE, 0xDE63, 0xEAA1, 0xEAA2, 0xEAA3, 0xB7F8, 0xBCAD, 0xDE64, 0xCAE4, 0xE0CE, 0xD4AF, 0xCFBD, 0xD5B7, 0xEAA4, 0xD5DE, 0xEAA5, 0xD0C1, 0xB9BC, 0xDE65, 0xB4C7, 0xB1D9, 0xDE66, 0xDE67, 0xDE68, 0xC0B1, 0xDE69, 0xDE6A, 0xDE6B, 0xDE6C, 0xB1E6, 0xB1E7, 0xDE6D, 0xB1E8, 0xDE6E, 0xDE6F, 0xDE70, 0xDE71, 0xB3BD, 0xC8E8, 0xDE72, 0xDE73, 0xDE74, 0xDE75, 0xE5C1, 0xDE76, 0xDE77, 0xB1DF, 0xDE78, 0xDE79, 0xDE7A, 0xC1C9, 0xB4EF, 0xDE7B, 0xDE7C, 0xC7A8, 0xD3D8, 0xDE7D, 0xC6F9, 0xD1B8, 0xDE7E, 0xB9FD, 0xC2F5, 0xDE80, 0xDE81, 0xDE82, 0xDE83, 0xDE84, 0xD3AD, 0xDE85, 0xD4CB, 0xBDFC, 0xDE86, 0xE5C2, 0xB7B5, 0xE5C3, 0xDE87, 0xDE88, 0xBBB9, 0xD5E2, 0xDE89, 0xBDF8, 0xD4B6, 0xCEA5, 0xC1AC, 0xB3D9, 0xDE8A, 0xDE8B, 0xCCF6, 0xDE8C, 0xE5C6, 0xE5C4, 0xE5C8, 0xDE8D, 0xE5CA, 0xE5C7, 0xB5CF, 0xC6C8, 0xDE8E, 0xB5FC, 0xE5C5, 0xDE8F, 0xCAF6, 0xDE90, 0xDE91, 0xE5C9, 0xDE92, 0xDE93, 0xDE94, 0xC3D4, 0xB1C5, 0xBCA3, 0xDE95, 0xDE96, 0xDE97, 0xD7B7, 0xDE98, 0xDE99, 0xCDCB, 0xCBCD, 0xCACA, 0xCCD3, 0xE5CC, 0xE5CB, 0xC4E6, 0xDE9A, 0xDE9B, 0xD1A1, 0xD1B7, 0xE5CD, 0xDE9C, 0xE5D0, 0xDE9D, 0xCDB8, 0xD6F0, 0xE5CF, 0xB5DD, 0xDE9E, 0xCDBE, 0xDE9F, 0xE5D1, 0xB6BA, 0xDEA0, 0xDF40, 0xCDA8, 0xB9E4, 0xDF41, 0xCAC5, 0xB3D1, 0xCBD9, 0xD4EC, 0xE5D2, 0xB7EA, 0xDF42, 0xDF43, 0xDF44, 0xE5CE, 0xDF45, 0xDF46, 0xDF47, 0xDF48, 0xDF49, 0xDF4A, 0xE5D5, 0xB4FE, 0xE5D6, 0xDF4B, 0xDF4C, 0xDF4D, 0xDF4E, 0xDF4F, 0xE5D3, 0xE5D4, 0xDF50, 0xD2DD, 0xDF51, 0xDF52, 0xC2DF, 0xB1C6, 0xDF53, 0xD3E2, 0xDF54, 0xDF55, 0xB6DD, 0xCBEC, 0xDF56, 0xE5D7, 0xDF57, 0xDF58, 0xD3F6, 0xDF59, 0xDF5A, 0xDF5B, 0xDF5C, 0xDF5D, 0xB1E9, 0xDF5E, 0xB6F4, 0xE5DA, 0xE5D8, 0xE5D9, 0xB5C0, 0xDF5F, 0xDF60, 0xDF61, 0xD2C5, 0xE5DC, 0xDF62, 0xDF63, 0xE5DE, 0xDF64, 0xDF65, 0xDF66, 0xDF67, 0xDF68, 0xDF69, 0xE5DD, 0xC7B2, 0xDF6A, 0xD2A3, 0xDF6B, 0xDF6C, 0xE5DB, 0xDF6D, 0xDF6E, 0xDF6F, 0xDF70, 0xD4E2, 0xD5DA, 0xDF71, 0xDF72, 0xDF73, 0xDF74, 0xDF75, 0xE5E0, 0xD7F1, 0xDF76, 0xDF77, 0xDF78, 0xDF79, 0xDF7A, 0xDF7B, 0xDF7C, 0xE5E1, 0xDF7D, 0xB1DC, 0xD1FB, 0xDF7E, 0xE5E2, 0xE5E4, 0xDF80, 0xDF81, 0xDF82, 0xDF83, 0xE5E3, 0xDF84, 0xDF85, 0xE5E5, 0xDF86, 0xDF87, 0xDF88, 0xDF89, 0xDF8A, 0xD2D8, 0xDF8B, 0xB5CB, 0xDF8C, 0xE7DF, 0xDF8D, 0xDAF5, 0xDF8E, 0xDAF8, 0xDF8F, 0xDAF6, 0xDF90, 0xDAF7, 0xDF91, 0xDF92, 0xDF93, 0xDAFA, 0xD0CF, 0xC4C7, 0xDF94, 0xDF95, 0xB0EE, 0xDF96, 0xDF97, 0xDF98, 0xD0B0, 0xDF99, 0xDAF9, 0xDF9A, 0xD3CA, 0xBAAA, 0xDBA2, 0xC7F1, 0xDF9B, 0xDAFC, 0xDAFB, 0xC9DB, 0xDAFD, 0xDF9C, 0xDBA1, 0xD7DE, 0xDAFE, 0xC1DA, 0xDF9D, 0xDF9E, 0xDBA5, 0xDF9F, 0xDFA0, 0xD3F4, 0xE040, 0xE041, 0xDBA7, 0xDBA4, 0xE042, 0xDBA8, 0xE043, 0xE044, 0xBDBC, 0xE045, 0xE046, 0xE047, 0xC0C9, 0xDBA3, 0xDBA6, 0xD6A3, 0xE048, 0xDBA9, 0xE049, 0xE04A, 0xE04B, 0xDBAD, 0xE04C, 0xE04D, 0xE04E, 0xDBAE, 0xDBAC, 0xBAC2, 0xE04F, 0xE050, 0xE051, 0xBFA4, 0xDBAB, 0xE052, 0xE053, 0xE054, 0xDBAA, 0xD4C7, 0xB2BF, 0xE055, 0xE056, 0xDBAF, 0xE057, 0xB9F9, 0xE058, 0xDBB0, 0xE059, 0xE05A, 0xE05B, 0xE05C, 0xB3BB, 0xE05D, 0xE05E, 0xE05F, 0xB5A6, 0xE060, 0xE061, 0xE062, 0xE063, 0xB6BC, 0xDBB1, 0xE064, 0xE065, 0xE066, 0xB6F5, 0xE067, 0xDBB2, 0xE068, 0xE069, 0xE06A, 0xE06B, 0xE06C, 0xE06D, 0xE06E, 0xE06F, 0xE070, 0xE071, 0xE072, 0xE073, 0xE074, 0xE075, 0xE076, 0xE077, 0xE078, 0xE079, 0xE07A, 0xE07B, 0xB1C9, 0xE07C, 0xE07D, 0xE07E, 0xE080, 0xDBB4, 0xE081, 0xE082, 0xE083, 0xDBB3, 0xDBB5, 0xE084, 0xE085, 0xE086, 0xE087, 0xE088, 0xE089, 0xE08A, 0xE08B, 0xE08C, 0xE08D, 0xE08E, 0xDBB7, 0xE08F, 0xDBB6, 0xE090, 0xE091, 0xE092, 0xE093, 0xE094, 0xE095, 0xE096, 0xDBB8, 0xE097, 0xE098, 0xE099, 0xE09A, 0xE09B, 0xE09C, 0xE09D, 0xE09E, 0xE09F, 0xDBB9, 0xE0A0, 0xE140, 0xDBBA, 0xE141, 0xE142, 0xD3CF, 0xF4FA, 0xC7F5, 0xD7C3, 0xC5E4, 0xF4FC, 0xF4FD, 0xF4FB, 0xE143, 0xBEC6, 0xE144, 0xE145, 0xE146, 0xE147, 0xD0EF, 0xE148, 0xE149, 0xB7D3, 0xE14A, 0xE14B, 0xD4CD, 0xCCAA, 0xE14C, 0xE14D, 0xF5A2, 0xF5A1, 0xBAA8, 0xF4FE, 0xCBD6, 0xE14E, 0xE14F, 0xE150, 0xF5A4, 0xC0D2, 0xE151, 0xB3EA, 0xE152, 0xCDAA, 0xF5A5, 0xF5A3, 0xBDB4, 0xF5A8, 0xE153, 0xF5A9, 0xBDCD, 0xC3B8, 0xBFE1, 0xCBE1, 0xF5AA, 0xE154, 0xE155, 0xE156, 0xF5A6, 0xF5A7, 0xC4F0, 0xE157, 0xE158, 0xE159, 0xE15A, 0xE15B, 0xF5AC, 0xE15C, 0xB4BC, 0xE15D, 0xD7ED, 0xE15E, 0xB4D7, 0xF5AB, 0xF5AE, 0xE15F, 0xE160, 0xF5AD, 0xF5AF, 0xD0D1, 0xE161, 0xE162, 0xE163, 0xE164, 0xE165, 0xE166, 0xE167, 0xC3D1, 0xC8A9, 0xE168, 0xE169, 0xE16A, 0xE16B, 0xE16C, 0xE16D, 0xF5B0, 0xF5B1, 0xE16E, 0xE16F, 0xE170, 0xE171, 0xE172, 0xE173, 0xF5B2, 0xE174, 0xE175, 0xF5B3, 0xF5B4, 0xF5B5, 0xE176, 0xE177, 0xE178, 0xE179, 0xF5B7, 0xF5B6, 0xE17A, 0xE17B, 0xE17C, 0xE17D, 0xF5B8, 0xE17E, 0xE180, 0xE181, 0xE182, 0xE183, 0xE184, 0xE185, 0xE186, 0xE187, 0xE188, 0xE189, 0xE18A, 0xB2C9, 0xE18B, 0xD3D4, 0xCACD, 0xE18C, 0xC0EF, 0xD6D8, 0xD2B0, 0xC1BF, 0xE18D, 0xBDF0, 0xE18E, 0xE18F, 0xE190, 0xE191, 0xE192, 0xE193, 0xE194, 0xE195, 0xE196, 0xE197, 0xB8AA, 0xE198, 0xE199, 0xE19A, 0xE19B, 0xE19C, 0xE19D, 0xE19E, 0xE19F, 0xE1A0, 0xE240, 0xE241, 0xE242, 0xE243, 0xE244, 0xE245, 0xE246, 0xE247, 0xE248, 0xE249, 0xE24A, 0xE24B, 0xE24C, 0xE24D, 0xE24E, 0xE24F, 0xE250, 0xE251, 0xE252, 0xE253, 0xE254, 0xE255, 0xE256, 0xE257, 0xE258, 0xE259, 0xE25A, 0xE25B, 0xE25C, 0xE25D, 0xE25E, 0xE25F, 0xE260, 0xE261, 0xE262, 0xE263, 0xE264, 0xE265, 0xE266, 0xE267, 0xE268, 0xE269, 0xE26A, 0xE26B, 0xE26C, 0xE26D, 0xE26E, 0xE26F, 0xE270, 0xE271, 0xE272, 0xE273, 0xE274, 0xE275, 0xE276, 0xE277, 0xE278, 0xE279, 0xE27A, 0xE27B, 0xE27C, 0xE27D, 0xE27E, 0xE280, 0xE281, 0xE282, 0xE283, 0xE284, 0xE285, 0xE286, 0xE287, 0xE288, 0xE289, 0xE28A, 0xE28B, 0xE28C, 0xE28D, 0xE28E, 0xE28F, 0xE290, 0xE291, 0xE292, 0xE293, 0xE294, 0xE295, 0xE296, 0xE297, 0xE298, 0xE299, 0xE29A, 0xE29B, 0xE29C, 0xE29D, 0xE29E, 0xE29F, 0xE2A0, 0xE340, 0xE341, 0xE342, 0xE343, 0xE344, 0xE345, 0xE346, 0xE347, 0xE348, 0xE349, 0xE34A, 0xE34B, 0xE34C, 0xE34D, 0xE34E, 0xE34F, 0xE350, 0xE351, 0xE352, 0xE353, 0xE354, 0xE355, 0xE356, 0xE357, 0xE358, 0xE359, 0xE35A, 0xE35B, 0xE35C, 0xE35D, 0xE35E, 0xE35F, 0xE360, 0xE361, 0xE362, 0xE363, 0xE364, 0xE365, 0xE366, 0xE367, 0xE368, 0xE369, 0xE36A, 0xE36B, 0xE36C, 0xE36D, 0xBCF8, 0xE36E, 0xE36F, 0xE370, 0xE371, 0xE372, 0xE373, 0xE374, 0xE375, 0xE376, 0xE377, 0xE378, 0xE379, 0xE37A, 0xE37B, 0xE37C, 0xE37D, 0xE37E, 0xE380, 0xE381, 0xE382, 0xE383, 0xE384, 0xE385, 0xE386, 0xE387, 0xF6C6, 0xE388, 0xE389, 0xE38A, 0xE38B, 0xE38C, 0xE38D, 0xE38E, 0xE38F, 0xE390, 0xE391, 0xE392, 0xE393, 0xE394, 0xE395, 0xE396, 0xE397, 0xE398, 0xE399, 0xE39A, 0xE39B, 0xE39C, 0xE39D, 0xE39E, 0xE39F, 0xE3A0, 0xE440, 0xE441, 0xE442, 0xE443, 0xE444, 0xE445, 0xF6C7, 0xE446, 0xE447, 0xE448, 0xE449, 0xE44A, 0xE44B, 0xE44C, 0xE44D, 0xE44E, 0xE44F, 0xE450, 0xE451, 0xE452, 0xE453, 0xE454, 0xE455, 0xE456, 0xE457, 0xE458, 0xE459, 0xE45A, 0xE45B, 0xE45C, 0xE45D, 0xE45E, 0xF6C8, 0xE45F, 0xE460, 0xE461, 0xE462, 0xE463, 0xE464, 0xE465, 0xE466, 0xE467, 0xE468, 0xE469, 0xE46A, 0xE46B, 0xE46C, 0xE46D, 0xE46E, 0xE46F, 0xE470, 0xE471, 0xE472, 0xE473, 0xE474, 0xE475, 0xE476, 0xE477, 0xE478, 0xE479, 0xE47A, 0xE47B, 0xE47C, 0xE47D, 0xE47E, 0xE480, 0xE481, 0xE482, 0xE483, 0xE484, 0xE485, 0xE486, 0xE487, 0xE488, 0xE489, 0xE48A, 0xE48B, 0xE48C, 0xE48D, 0xE48E, 0xE48F, 0xE490, 0xE491, 0xE492, 0xE493, 0xE494, 0xE495, 0xE496, 0xE497, 0xE498, 0xE499, 0xE49A, 0xE49B, 0xE49C, 0xE49D, 0xE49E, 0xE49F, 0xE4A0, 0xE540, 0xE541, 0xE542, 0xE543, 0xE544, 0xE545, 0xE546, 0xE547, 0xE548, 0xE549, 0xE54A, 0xE54B, 0xE54C, 0xE54D, 0xE54E, 0xE54F, 0xE550, 0xE551, 0xE552, 0xE553, 0xE554, 0xE555, 0xE556, 0xE557, 0xE558, 0xE559, 0xE55A, 0xE55B, 0xE55C, 0xE55D, 0xE55E, 0xE55F, 0xE560, 0xE561, 0xE562, 0xE563, 0xE564, 0xE565, 0xE566, 0xE567, 0xE568, 0xE569, 0xE56A, 0xE56B, 0xE56C, 0xE56D, 0xE56E, 0xE56F, 0xE570, 0xE571, 0xE572, 0xE573, 0xF6C9, 0xE574, 0xE575, 0xE576, 0xE577, 0xE578, 0xE579, 0xE57A, 0xE57B, 0xE57C, 0xE57D, 0xE57E, 0xE580, 0xE581, 0xE582, 0xE583, 0xE584, 0xE585, 0xE586, 0xE587, 0xE588, 0xE589, 0xE58A, 0xE58B, 0xE58C, 0xE58D, 0xE58E, 0xE58F, 0xE590, 0xE591, 0xE592, 0xE593, 0xE594, 0xE595, 0xE596, 0xE597, 0xE598, 0xE599, 0xE59A, 0xE59B, 0xE59C, 0xE59D, 0xE59E, 0xE59F, 0xF6CA, 0xE5A0, 0xE640, 0xE641, 0xE642, 0xE643, 0xE644, 0xE645, 0xE646, 0xE647, 0xE648, 0xE649, 0xE64A, 0xE64B, 0xE64C, 0xE64D, 0xE64E, 0xE64F, 0xE650, 0xE651, 0xE652, 0xE653, 0xE654, 0xE655, 0xE656, 0xE657, 0xE658, 0xE659, 0xE65A, 0xE65B, 0xE65C, 0xE65D, 0xE65E, 0xE65F, 0xE660, 0xE661, 0xE662, 0xF6CC, 0xE663, 0xE664, 0xE665, 0xE666, 0xE667, 0xE668, 0xE669, 0xE66A, 0xE66B, 0xE66C, 0xE66D, 0xE66E, 0xE66F, 0xE670, 0xE671, 0xE672, 0xE673, 0xE674, 0xE675, 0xE676, 0xE677, 0xE678, 0xE679, 0xE67A, 0xE67B, 0xE67C, 0xE67D, 0xE67E, 0xE680, 0xE681, 0xE682, 0xE683, 0xE684, 0xE685, 0xE686, 0xE687, 0xE688, 0xE689, 0xE68A, 0xE68B, 0xE68C, 0xE68D, 0xE68E, 0xE68F, 0xE690, 0xE691, 0xE692, 0xE693, 0xE694, 0xE695, 0xE696, 0xE697, 0xE698, 0xE699, 0xE69A, 0xE69B, 0xE69C, 0xE69D, 0xF6CB, 0xE69E, 0xE69F, 0xE6A0, 0xE740, 0xE741, 0xE742, 0xE743, 0xE744, 0xE745, 0xE746, 0xE747, 0xF7E9, 0xE748, 0xE749, 0xE74A, 0xE74B, 0xE74C, 0xE74D, 0xE74E, 0xE74F, 0xE750, 0xE751, 0xE752, 0xE753, 0xE754, 0xE755, 0xE756, 0xE757, 0xE758, 0xE759, 0xE75A, 0xE75B, 0xE75C, 0xE75D, 0xE75E, 0xE75F, 0xE760, 0xE761, 0xE762, 0xE763, 0xE764, 0xE765, 0xE766, 0xE767, 0xE768, 0xE769, 0xE76A, 0xE76B, 0xE76C, 0xE76D, 0xE76E, 0xE76F, 0xE770, 0xE771, 0xE772, 0xE773, 0xE774, 0xE775, 0xE776, 0xE777, 0xE778, 0xE779, 0xE77A, 0xE77B, 0xE77C, 0xE77D, 0xE77E, 0xE780, 0xE781, 0xE782, 0xE783, 0xE784, 0xE785, 0xE786, 0xE787, 0xE788, 0xE789, 0xE78A, 0xE78B, 0xE78C, 0xE78D, 0xE78E, 0xE78F, 0xE790, 0xE791, 0xE792, 0xE793, 0xE794, 0xE795, 0xE796, 0xE797, 0xE798, 0xE799, 0xE79A, 0xE79B, 0xE79C, 0xE79D, 0xE79E, 0xE79F, 0xE7A0, 0xE840, 0xE841, 0xE842, 0xE843, 0xE844, 0xE845, 0xE846, 0xE847, 0xE848, 0xE849, 0xE84A, 0xE84B, 0xE84C, 0xE84D, 0xE84E, 0xF6CD, 0xE84F, 0xE850, 0xE851, 0xE852, 0xE853, 0xE854, 0xE855, 0xE856, 0xE857, 0xE858, 0xE859, 0xE85A, 0xE85B, 0xE85C, 0xE85D, 0xE85E, 0xE85F, 0xE860, 0xE861, 0xE862, 0xE863, 0xE864, 0xE865, 0xE866, 0xE867, 0xE868, 0xE869, 0xE86A, 0xE86B, 0xE86C, 0xE86D, 0xE86E, 0xE86F, 0xE870, 0xE871, 0xE872, 0xE873, 0xE874, 0xE875, 0xE876, 0xE877, 0xE878, 0xE879, 0xE87A, 0xF6CE, 0xE87B, 0xE87C, 0xE87D, 0xE87E, 0xE880, 0xE881, 0xE882, 0xE883, 0xE884, 0xE885, 0xE886, 0xE887, 0xE888, 0xE889, 0xE88A, 0xE88B, 0xE88C, 0xE88D, 0xE88E, 0xE88F, 0xE890, 0xE891, 0xE892, 0xE893, 0xE894, 0xEEC4, 0xEEC5, 0xEEC6, 0xD5EB, 0xB6A4, 0xEEC8, 0xEEC7, 0xEEC9, 0xEECA, 0xC7A5, 0xEECB, 0xEECC, 0xE895, 0xB7B0, 0xB5F6, 0xEECD, 0xEECF, 0xE896, 0xEECE, 0xE897, 0xB8C6, 0xEED0, 0xEED1, 0xEED2, 0xB6DB, 0xB3AE, 0xD6D3, 0xC4C6, 0xB1B5, 0xB8D6, 0xEED3, 0xEED4, 0xD4BF, 0xC7D5, 0xBEFB, 0xCED9, 0xB9B3, 0xEED6, 0xEED5, 0xEED8, 0xEED7, 0xC5A5, 0xEED9, 0xEEDA, 0xC7AE, 0xEEDB, 0xC7AF, 0xEEDC, 0xB2A7, 0xEEDD, 0xEEDE, 0xEEDF, 0xEEE0, 0xEEE1, 0xD7EA, 0xEEE2, 0xEEE3, 0xBCD8, 0xEEE4, 0xD3CB, 0xCCFA, 0xB2AC, 0xC1E5, 0xEEE5, 0xC7A6, 0xC3AD, 0xE898, 0xEEE6, 0xEEE7, 0xEEE8, 0xEEE9, 0xEEEA, 0xEEEB, 0xEEEC, 0xE899, 0xEEED, 0xEEEE, 0xEEEF, 0xE89A, 0xE89B, 0xEEF0, 0xEEF1, 0xEEF2, 0xEEF4, 0xEEF3, 0xE89C, 0xEEF5, 0xCDAD, 0xC2C1, 0xEEF6, 0xEEF7, 0xEEF8, 0xD5A1, 0xEEF9, 0xCFB3, 0xEEFA, 0xEEFB, 0xE89D, 0xEEFC, 0xEEFD, 0xEFA1, 0xEEFE, 0xEFA2, 0xB8F5, 0xC3FA, 0xEFA3, 0xEFA4, 0xBDC2, 0xD2BF, 0xB2F9, 0xEFA5, 0xEFA6, 0xEFA7, 0xD2F8, 0xEFA8, 0xD6FD, 0xEFA9, 0xC6CC, 0xE89E, 0xEFAA, 0xEFAB, 0xC1B4, 0xEFAC, 0xCFFA, 0xCBF8, 0xEFAE, 0xEFAD, 0xB3FA, 0xB9F8, 0xEFAF, 0xEFB0, 0xD0E2, 0xEFB1, 0xEFB2, 0xB7E6, 0xD0BF, 0xEFB3, 0xEFB4, 0xEFB5, 0xC8F1, 0xCCE0, 0xEFB6, 0xEFB7, 0xEFB8, 0xEFB9, 0xEFBA, 0xD5E0, 0xEFBB, 0xB4ED, 0xC3AA, 0xEFBC, 0xE89F, 0xEFBD, 0xEFBE, 0xEFBF, 0xE8A0, 0xCEFD, 0xEFC0, 0xC2E0, 0xB4B8, 0xD7B6, 0xBDF5, 0xE940, 0xCFC7, 0xEFC3, 0xEFC1, 0xEFC2, 0xEFC4, 0xB6A7, 0xBCFC, 0xBEE2, 0xC3CC, 0xEFC5, 0xEFC6, 0xE941, 0xEFC7, 0xEFCF, 0xEFC8, 0xEFC9, 0xEFCA, 0xC7C2, 0xEFF1, 0xB6CD, 0xEFCB, 0xE942, 0xEFCC, 0xEFCD, 0xB6C6, 0xC3BE, 0xEFCE, 0xE943, 0xEFD0, 0xEFD1, 0xEFD2, 0xD5F2, 0xE944, 0xEFD3, 0xC4F7, 0xE945, 0xEFD4, 0xC4F8, 0xEFD5, 0xEFD6, 0xB8E4, 0xB0F7, 0xEFD7, 0xEFD8, 0xEFD9, 0xE946, 0xEFDA, 0xEFDB, 0xEFDC, 0xEFDD, 0xE947, 0xEFDE, 0xBEB5, 0xEFE1, 0xEFDF, 0xEFE0, 0xE948, 0xEFE2, 0xEFE3, 0xC1CD, 0xEFE4, 0xEFE5, 0xEFE6, 0xEFE7, 0xEFE8, 0xEFE9, 0xEFEA, 0xEFEB, 0xEFEC, 0xC0D8, 0xE949, 0xEFED, 0xC1AD, 0xEFEE, 0xEFEF, 0xEFF0, 0xE94A, 0xE94B, 0xCFE2, 0xE94C, 0xE94D, 0xE94E, 0xE94F, 0xE950, 0xE951, 0xE952, 0xE953, 0xB3A4, 0xE954, 0xE955, 0xE956, 0xE957, 0xE958, 0xE959, 0xE95A, 0xE95B, 0xE95C, 0xE95D, 0xE95E, 0xE95F, 0xE960, 0xE961, 0xE962, 0xE963, 0xE964, 0xE965, 0xE966, 0xE967, 0xE968, 0xE969, 0xE96A, 0xE96B, 0xE96C, 0xE96D, 0xE96E, 0xE96F, 0xE970, 0xE971, 0xE972, 0xE973, 0xE974, 0xE975, 0xE976, 0xE977, 0xE978, 0xE979, 0xE97A, 0xE97B, 0xE97C, 0xE97D, 0xE97E, 0xE980, 0xE981, 0xE982, 0xE983, 0xE984, 0xE985, 0xE986, 0xE987, 0xE988, 0xE989, 0xE98A, 0xE98B, 0xE98C, 0xE98D, 0xE98E, 0xE98F, 0xE990, 0xE991, 0xE992, 0xE993, 0xE994, 0xE995, 0xE996, 0xE997, 0xE998, 0xE999, 0xE99A, 0xE99B, 0xE99C, 0xE99D, 0xE99E, 0xE99F, 0xE9A0, 0xEA40, 0xEA41, 0xEA42, 0xEA43, 0xEA44, 0xEA45, 0xEA46, 0xEA47, 0xEA48, 0xEA49, 0xEA4A, 0xEA4B, 0xEA4C, 0xEA4D, 0xEA4E, 0xEA4F, 0xEA50, 0xEA51, 0xEA52, 0xEA53, 0xEA54, 0xEA55, 0xEA56, 0xEA57, 0xEA58, 0xEA59, 0xEA5A, 0xEA5B, 0xC3C5, 0xE3C5, 0xC9C1, 0xE3C6, 0xEA5C, 0xB1D5, 0xCECA, 0xB4B3, 0xC8F2, 0xE3C7, 0xCFD0, 0xE3C8, 0xBCE4, 0xE3C9, 0xE3CA, 0xC3C6, 0xD5A2, 0xC4D6, 0xB9EB, 0xCEC5, 0xE3CB, 0xC3F6, 0xE3CC, 0xEA5D, 0xB7A7, 0xB8F3, 0xBAD2, 0xE3CD, 0xE3CE, 0xD4C4, 0xE3CF, 0xEA5E, 0xE3D0, 0xD1CB, 0xE3D1, 0xE3D2, 0xE3D3, 0xE3D4, 0xD1D6, 0xE3D5, 0xB2FB, 0xC0BB, 0xE3D6, 0xEA5F, 0xC0AB, 0xE3D7, 0xE3D8, 0xE3D9, 0xEA60, 0xE3DA, 0xE3DB, 0xEA61, 0xB8B7, 0xDAE2, 0xEA62, 0xB6D3, 0xEA63, 0xDAE4, 0xDAE3, 0xEA64, 0xEA65, 0xEA66, 0xEA67, 0xEA68, 0xEA69, 0xEA6A, 0xDAE6, 0xEA6B, 0xEA6C, 0xEA6D, 0xC8EE, 0xEA6E, 0xEA6F, 0xDAE5, 0xB7C0, 0xD1F4, 0xD2F5, 0xD5F3, 0xBDD7, 0xEA70, 0xEA71, 0xEA72, 0xEA73, 0xD7E8, 0xDAE8, 0xDAE7, 0xEA74, 0xB0A2, 0xCDD3, 0xEA75, 0xDAE9, 0xEA76, 0xB8BD, 0xBCCA, 0xC2BD, 0xC2A4, 0xB3C2, 0xDAEA, 0xEA77, 0xC2AA, 0xC4B0, 0xBDB5, 0xEA78, 0xEA79, 0xCFDE, 0xEA7A, 0xEA7B, 0xEA7C, 0xDAEB, 0xC9C2, 0xEA7D, 0xEA7E, 0xEA80, 0xEA81, 0xEA82, 0xB1DD, 0xEA83, 0xEA84, 0xEA85, 0xDAEC, 0xEA86, 0xB6B8, 0xD4BA, 0xEA87, 0xB3FD, 0xEA88, 0xEA89, 0xDAED, 0xD4C9, 0xCFD5, 0xC5E3, 0xEA8A, 0xDAEE, 0xEA8B, 0xEA8C, 0xEA8D, 0xEA8E, 0xEA8F, 0xDAEF, 0xEA90, 0xDAF0, 0xC1EA, 0xCCD5, 0xCFDD, 0xEA91, 0xEA92, 0xEA93, 0xEA94, 0xEA95, 0xEA96, 0xEA97, 0xEA98, 0xEA99, 0xEA9A, 0xEA9B, 0xEA9C, 0xEA9D, 0xD3E7, 0xC2A1, 0xEA9E, 0xDAF1, 0xEA9F, 0xEAA0, 0xCBE5, 0xEB40, 0xDAF2, 0xEB41, 0xCBE6, 0xD2FE, 0xEB42, 0xEB43, 0xEB44, 0xB8F4, 0xEB45, 0xEB46, 0xDAF3, 0xB0AF, 0xCFB6, 0xEB47, 0xEB48, 0xD5CF, 0xEB49, 0xEB4A, 0xEB4B, 0xEB4C, 0xEB4D, 0xEB4E, 0xEB4F, 0xEB50, 0xEB51, 0xEB52, 0xCBED, 0xEB53, 0xEB54, 0xEB55, 0xEB56, 0xEB57, 0xEB58, 0xEB59, 0xEB5A, 0xDAF4, 0xEB5B, 0xEB5C, 0xE3C4, 0xEB5D, 0xEB5E, 0xC1A5, 0xEB5F, 0xEB60, 0xF6BF, 0xEB61, 0xEB62, 0xF6C0, 0xF6C1, 0xC4D1, 0xEB63, 0xC8B8, 0xD1E3, 0xEB64, 0xEB65, 0xD0DB, 0xD1C5, 0xBCAF, 0xB9CD, 0xEB66, 0xEFF4, 0xEB67, 0xEB68, 0xB4C6, 0xD3BA, 0xF6C2, 0xB3FB, 0xEB69, 0xEB6A, 0xF6C3, 0xEB6B, 0xEB6C, 0xB5F1, 0xEB6D, 0xEB6E, 0xEB6F, 0xEB70, 0xEB71, 0xEB72, 0xEB73, 0xEB74, 0xEB75, 0xEB76, 0xF6C5, 0xEB77, 0xEB78, 0xEB79, 0xEB7A, 0xEB7B, 0xEB7C, 0xEB7D, 0xD3EA, 0xF6A7, 0xD1A9, 0xEB7E, 0xEB80, 0xEB81, 0xEB82, 0xF6A9, 0xEB83, 0xEB84, 0xEB85, 0xF6A8, 0xEB86, 0xEB87, 0xC1E3, 0xC0D7, 0xEB88, 0xB1A2, 0xEB89, 0xEB8A, 0xEB8B, 0xEB8C, 0xCEED, 0xEB8D, 0xD0E8, 0xF6AB, 0xEB8E, 0xEB8F, 0xCFF6, 0xEB90, 0xF6AA, 0xD5F0, 0xF6AC, 0xC3B9, 0xEB91, 0xEB92, 0xEB93, 0xBBF4, 0xF6AE, 0xF6AD, 0xEB94, 0xEB95, 0xEB96, 0xC4DE, 0xEB97, 0xEB98, 0xC1D8, 0xEB99, 0xEB9A, 0xEB9B, 0xEB9C, 0xEB9D, 0xCBAA, 0xEB9E, 0xCFBC, 0xEB9F, 0xEBA0, 0xEC40, 0xEC41, 0xEC42, 0xEC43, 0xEC44, 0xEC45, 0xEC46, 0xEC47, 0xEC48, 0xF6AF, 0xEC49, 0xEC4A, 0xF6B0, 0xEC4B, 0xEC4C, 0xF6B1, 0xEC4D, 0xC2B6, 0xEC4E, 0xEC4F, 0xEC50, 0xEC51, 0xEC52, 0xB0D4, 0xC5F9, 0xEC53, 0xEC54, 0xEC55, 0xEC56, 0xF6B2, 0xEC57, 0xEC58, 0xEC59, 0xEC5A, 0xEC5B, 0xEC5C, 0xEC5D, 0xEC5E, 0xEC5F, 0xEC60, 0xEC61, 0xEC62, 0xEC63, 0xEC64, 0xEC65, 0xEC66, 0xEC67, 0xEC68, 0xEC69, 0xC7E0, 0xF6A6, 0xEC6A, 0xEC6B, 0xBEB8, 0xEC6C, 0xEC6D, 0xBEB2, 0xEC6E, 0xB5E5, 0xEC6F, 0xEC70, 0xB7C7, 0xEC71, 0xBFBF, 0xC3D2, 0xC3E6, 0xEC72, 0xEC73, 0xD8CC, 0xEC74, 0xEC75, 0xEC76, 0xB8EF, 0xEC77, 0xEC78, 0xEC79, 0xEC7A, 0xEC7B, 0xEC7C, 0xEC7D, 0xEC7E, 0xEC80, 0xBDF9, 0xD1A5, 0xEC81, 0xB0D0, 0xEC82, 0xEC83, 0xEC84, 0xEC85, 0xEC86, 0xF7B0, 0xEC87, 0xEC88, 0xEC89, 0xEC8A, 0xEC8B, 0xEC8C, 0xEC8D, 0xEC8E, 0xF7B1, 0xEC8F, 0xEC90, 0xEC91, 0xEC92, 0xEC93, 0xD0AC, 0xEC94, 0xB0B0, 0xEC95, 0xEC96, 0xEC97, 0xF7B2, 0xF7B3, 0xEC98, 0xF7B4, 0xEC99, 0xEC9A, 0xEC9B, 0xC7CA, 0xEC9C, 0xEC9D, 0xEC9E, 0xEC9F, 0xECA0, 0xED40, 0xED41, 0xBECF, 0xED42, 0xED43, 0xF7B7, 0xED44, 0xED45, 0xED46, 0xED47, 0xED48, 0xED49, 0xED4A, 0xF7B6, 0xED4B, 0xB1DE, 0xED4C, 0xF7B5, 0xED4D, 0xED4E, 0xF7B8, 0xED4F, 0xF7B9, 0xED50, 0xED51, 0xED52, 0xED53, 0xED54, 0xED55, 0xED56, 0xED57, 0xED58, 0xED59, 0xED5A, 0xED5B, 0xED5C, 0xED5D, 0xED5E, 0xED5F, 0xED60, 0xED61, 0xED62, 0xED63, 0xED64, 0xED65, 0xED66, 0xED67, 0xED68, 0xED69, 0xED6A, 0xED6B, 0xED6C, 0xED6D, 0xED6E, 0xED6F, 0xED70, 0xED71, 0xED72, 0xED73, 0xED74, 0xED75, 0xED76, 0xED77, 0xED78, 0xED79, 0xED7A, 0xED7B, 0xED7C, 0xED7D, 0xED7E, 0xED80, 0xED81, 0xCEA4, 0xC8CD, 0xED82, 0xBAAB, 0xE8B8, 0xE8B9, 0xE8BA, 0xBEC2, 0xED83, 0xED84, 0xED85, 0xED86, 0xED87, 0xD2F4, 0xED88, 0xD4CF, 0xC9D8, 0xED89, 0xED8A, 0xED8B, 0xED8C, 0xED8D, 0xED8E, 0xED8F, 0xED90, 0xED91, 0xED92, 0xED93, 0xED94, 0xED95, 0xED96, 0xED97, 0xED98, 0xED99, 0xED9A, 0xED9B, 0xED9C, 0xED9D, 0xED9E, 0xED9F, 0xEDA0, 0xEE40, 0xEE41, 0xEE42, 0xEE43, 0xEE44, 0xEE45, 0xEE46, 0xEE47, 0xEE48, 0xEE49, 0xEE4A, 0xEE4B, 0xEE4C, 0xEE4D, 0xEE4E, 0xEE4F, 0xEE50, 0xEE51, 0xEE52, 0xEE53, 0xEE54, 0xEE55, 0xEE56, 0xEE57, 0xEE58, 0xEE59, 0xEE5A, 0xEE5B, 0xEE5C, 0xEE5D, 0xEE5E, 0xEE5F, 0xEE60, 0xEE61, 0xEE62, 0xEE63, 0xEE64, 0xEE65, 0xEE66, 0xEE67, 0xEE68, 0xEE69, 0xEE6A, 0xEE6B, 0xEE6C, 0xEE6D, 0xEE6E, 0xEE6F, 0xEE70, 0xEE71, 0xEE72, 0xEE73, 0xEE74, 0xEE75, 0xEE76, 0xEE77, 0xEE78, 0xEE79, 0xEE7A, 0xEE7B, 0xEE7C, 0xEE7D, 0xEE7E, 0xEE80, 0xEE81, 0xEE82, 0xEE83, 0xEE84, 0xEE85, 0xEE86, 0xEE87, 0xEE88, 0xEE89, 0xEE8A, 0xEE8B, 0xEE8C, 0xEE8D, 0xEE8E, 0xEE8F, 0xEE90, 0xEE91, 0xEE92, 0xEE93, 0xEE94, 0xEE95, 0xEE96, 0xEE97, 0xEE98, 0xEE99, 0xEE9A, 0xEE9B, 0xEE9C, 0xEE9D, 0xEE9E, 0xEE9F, 0xEEA0, 0xEF40, 0xEF41, 0xEF42, 0xEF43, 0xEF44, 0xEF45, 0xD2B3, 0xB6A5, 0xC7EA, 0xF1FC, 0xCFEE, 0xCBB3, 0xD0EB, 0xE7EF, 0xCDE7, 0xB9CB, 0xB6D9, 0xF1FD, 0xB0E4, 0xCBCC, 0xF1FE, 0xD4A4, 0xC2AD, 0xC1EC, 0xC6C4, 0xBEB1, 0xF2A1, 0xBCD5, 0xEF46, 0xF2A2, 0xF2A3, 0xEF47, 0xF2A4, 0xD2C3, 0xC6B5, 0xEF48, 0xCDC7, 0xF2A5, 0xEF49, 0xD3B1, 0xBFC5, 0xCCE2, 0xEF4A, 0xF2A6, 0xF2A7, 0xD1D5, 0xB6EE, 0xF2A8, 0xF2A9, 0xB5DF, 0xF2AA, 0xF2AB, 0xEF4B, 0xB2FC, 0xF2AC, 0xF2AD, 0xC8A7, 0xEF4C, 0xEF4D, 0xEF4E, 0xEF4F, 0xEF50, 0xEF51, 0xEF52, 0xEF53, 0xEF54, 0xEF55, 0xEF56, 0xEF57, 0xEF58, 0xEF59, 0xEF5A, 0xEF5B, 0xEF5C, 0xEF5D, 0xEF5E, 0xEF5F, 0xEF60, 0xEF61, 0xEF62, 0xEF63, 0xEF64, 0xEF65, 0xEF66, 0xEF67, 0xEF68, 0xEF69, 0xEF6A, 0xEF6B, 0xEF6C, 0xEF6D, 0xEF6E, 0xEF6F, 0xEF70, 0xEF71, 0xB7E7, 0xEF72, 0xEF73, 0xECA9, 0xECAA, 0xECAB, 0xEF74, 0xECAC, 0xEF75, 0xEF76, 0xC6AE, 0xECAD, 0xECAE, 0xEF77, 0xEF78, 0xEF79, 0xB7C9, 0xCAB3, 0xEF7A, 0xEF7B, 0xEF7C, 0xEF7D, 0xEF7E, 0xEF80, 0xEF81, 0xE2B8, 0xF7CF, 0xEF82, 0xEF83, 0xEF84, 0xEF85, 0xEF86, 0xEF87, 0xEF88, 0xEF89, 0xEF8A, 0xEF8B, 0xEF8C, 0xEF8D, 0xEF8E, 0xEF8F, 0xEF90, 0xEF91, 0xEF92, 0xEF93, 0xEF94, 0xEF95, 0xEF96, 0xEF97, 0xEF98, 0xEF99, 0xEF9A, 0xEF9B, 0xEF9C, 0xEF9D, 0xEF9E, 0xEF9F, 0xEFA0, 0xF040, 0xF041, 0xF042, 0xF043, 0xF044, 0xF7D0, 0xF045, 0xF046, 0xB2CD, 0xF047, 0xF048, 0xF049, 0xF04A, 0xF04B, 0xF04C, 0xF04D, 0xF04E, 0xF04F, 0xF050, 0xF051, 0xF052, 0xF053, 0xF054, 0xF055, 0xF056, 0xF057, 0xF058, 0xF059, 0xF05A, 0xF05B, 0xF05C, 0xF05D, 0xF05E, 0xF05F, 0xF060, 0xF061, 0xF062, 0xF063, 0xF7D1, 0xF064, 0xF065, 0xF066, 0xF067, 0xF068, 0xF069, 0xF06A, 0xF06B, 0xF06C, 0xF06D, 0xF06E, 0xF06F, 0xF070, 0xF071, 0xF072, 0xF073, 0xF074, 0xF075, 0xF076, 0xF077, 0xF078, 0xF079, 0xF07A, 0xF07B, 0xF07C, 0xF07D, 0xF07E, 0xF080, 0xF081, 0xF082, 0xF083, 0xF084, 0xF085, 0xF086, 0xF087, 0xF088, 0xF089, 0xF7D3, 0xF7D2, 0xF08A, 0xF08B, 0xF08C, 0xF08D, 0xF08E, 0xF08F, 0xF090, 0xF091, 0xF092, 0xF093, 0xF094, 0xF095, 0xF096, 0xE2BB, 0xF097, 0xBCA2, 0xF098, 0xE2BC, 0xE2BD, 0xE2BE, 0xE2BF, 0xE2C0, 0xE2C1, 0xB7B9, 0xD2FB, 0xBDA4, 0xCACE, 0xB1A5, 0xCBC7, 0xF099, 0xE2C2, 0xB6FC, 0xC8C4, 0xE2C3, 0xF09A, 0xF09B, 0xBDC8, 0xF09C, 0xB1FD, 0xE2C4, 0xF09D, 0xB6F6, 0xE2C5, 0xC4D9, 0xF09E, 0xF09F, 0xE2C6, 0xCFDA, 0xB9DD, 0xE2C7, 0xC0A1, 0xF0A0, 0xE2C8, 0xB2F6, 0xF140, 0xE2C9, 0xF141, 0xC1F3, 0xE2CA, 0xE2CB, 0xC2F8, 0xE2CC, 0xE2CD, 0xE2CE, 0xCAD7, 0xD8B8, 0xD9E5, 0xCFE3, 0xF142, 0xF143, 0xF144, 0xF145, 0xF146, 0xF147, 0xF148, 0xF149, 0xF14A, 0xF14B, 0xF14C, 0xF0A5, 0xF14D, 0xF14E, 0xDCB0, 0xF14F, 0xF150, 0xF151, 0xF152, 0xF153, 0xF154, 0xF155, 0xF156, 0xF157, 0xF158, 0xF159, 0xF15A, 0xF15B, 0xF15C, 0xF15D, 0xF15E, 0xF15F, 0xF160, 0xF161, 0xF162, 0xF163, 0xF164, 0xF165, 0xF166, 0xF167, 0xF168, 0xF169, 0xF16A, 0xF16B, 0xF16C, 0xF16D, 0xF16E, 0xF16F, 0xF170, 0xF171, 0xF172, 0xF173, 0xF174, 0xF175, 0xF176, 0xF177, 0xF178, 0xF179, 0xF17A, 0xF17B, 0xF17C, 0xF17D, 0xF17E, 0xF180, 0xF181, 0xF182, 0xF183, 0xF184, 0xF185, 0xF186, 0xF187, 0xF188, 0xF189, 0xF18A, 0xF18B, 0xF18C, 0xF18D, 0xF18E, 0xF18F, 0xF190, 0xF191, 0xF192, 0xF193, 0xF194, 0xF195, 0xF196, 0xF197, 0xF198, 0xF199, 0xF19A, 0xF19B, 0xF19C, 0xF19D, 0xF19E, 0xF19F, 0xF1A0, 0xF240, 0xF241, 0xF242, 0xF243, 0xF244, 0xF245, 0xF246, 0xF247, 0xF248, 0xF249, 0xF24A, 0xF24B, 0xF24C, 0xF24D, 0xF24E, 0xF24F, 0xF250, 0xF251, 0xF252, 0xF253, 0xF254, 0xF255, 0xF256, 0xF257, 0xF258, 0xF259, 0xF25A, 0xF25B, 0xF25C, 0xF25D, 0xF25E, 0xF25F, 0xF260, 0xF261, 0xF262, 0xF263, 0xF264, 0xF265, 0xF266, 0xF267, 0xF268, 0xF269, 0xF26A, 0xF26B, 0xF26C, 0xF26D, 0xF26E, 0xF26F, 0xF270, 0xF271, 0xF272, 0xF273, 0xF274, 0xF275, 0xF276, 0xF277, 0xF278, 0xF279, 0xF27A, 0xF27B, 0xF27C, 0xF27D, 0xF27E, 0xF280, 0xF281, 0xF282, 0xF283, 0xF284, 0xF285, 0xF286, 0xF287, 0xF288, 0xF289, 0xF28A, 0xF28B, 0xF28C, 0xF28D, 0xF28E, 0xF28F, 0xF290, 0xF291, 0xF292, 0xF293, 0xF294, 0xF295, 0xF296, 0xF297, 0xF298, 0xF299, 0xF29A, 0xF29B, 0xF29C, 0xF29D, 0xF29E, 0xF29F, 0xF2A0, 0xF340, 0xF341, 0xF342, 0xF343, 0xF344, 0xF345, 0xF346, 0xF347, 0xF348, 0xF349, 0xF34A, 0xF34B, 0xF34C, 0xF34D, 0xF34E, 0xF34F, 0xF350, 0xF351, 0xC2ED, 0xD4A6, 0xCDD4, 0xD1B1, 0xB3DB, 0xC7FD, 0xF352, 0xB2B5, 0xC2BF, 0xE6E0, 0xCABB, 0xE6E1, 0xE6E2, 0xBED4, 0xE6E3, 0xD7A4, 0xCDD5, 0xE6E5, 0xBCDD, 0xE6E4, 0xE6E6, 0xE6E7, 0xC2EE, 0xF353, 0xBDBE, 0xE6E8, 0xC2E6, 0xBAA7, 0xE6E9, 0xF354, 0xE6EA, 0xB3D2, 0xD1E9, 0xF355, 0xF356, 0xBFA5, 0xE6EB, 0xC6EF, 0xE6EC, 0xE6ED, 0xF357, 0xF358, 0xE6EE, 0xC6AD, 0xE6EF, 0xF359, 0xC9A7, 0xE6F0, 0xE6F1, 0xE6F2, 0xE5B9, 0xE6F3, 0xE6F4, 0xC2E2, 0xE6F5, 0xE6F6, 0xD6E8, 0xE6F7, 0xF35A, 0xE6F8, 0xB9C7, 0xF35B, 0xF35C, 0xF35D, 0xF35E, 0xF35F, 0xF360, 0xF361, 0xF7BB, 0xF7BA, 0xF362, 0xF363, 0xF364, 0xF365, 0xF7BE, 0xF7BC, 0xBAA1, 0xF366, 0xF7BF, 0xF367, 0xF7C0, 0xF368, 0xF369, 0xF36A, 0xF7C2, 0xF7C1, 0xF7C4, 0xF36B, 0xF36C, 0xF7C3, 0xF36D, 0xF36E, 0xF36F, 0xF370, 0xF371, 0xF7C5, 0xF7C6, 0xF372, 0xF373, 0xF374, 0xF375, 0xF7C7, 0xF376, 0xCBE8, 0xF377, 0xF378, 0xF379, 0xF37A, 0xB8DF, 0xF37B, 0xF37C, 0xF37D, 0xF37E, 0xF380, 0xF381, 0xF7D4, 0xF382, 0xF7D5, 0xF383, 0xF384, 0xF385, 0xF386, 0xF7D6, 0xF387, 0xF388, 0xF389, 0xF38A, 0xF7D8, 0xF38B, 0xF7DA, 0xF38C, 0xF7D7, 0xF38D, 0xF38E, 0xF38F, 0xF390, 0xF391, 0xF392, 0xF393, 0xF394, 0xF395, 0xF7DB, 0xF396, 0xF7D9, 0xF397, 0xF398, 0xF399, 0xF39A, 0xF39B, 0xF39C, 0xF39D, 0xD7D7, 0xF39E, 0xF39F, 0xF3A0, 0xF440, 0xF7DC, 0xF441, 0xF442, 0xF443, 0xF444, 0xF445, 0xF446, 0xF7DD, 0xF447, 0xF448, 0xF449, 0xF7DE, 0xF44A, 0xF44B, 0xF44C, 0xF44D, 0xF44E, 0xF44F, 0xF450, 0xF451, 0xF452, 0xF453, 0xF454, 0xF7DF, 0xF455, 0xF456, 0xF457, 0xF7E0, 0xF458, 0xF459, 0xF45A, 0xF45B, 0xF45C, 0xF45D, 0xF45E, 0xF45F, 0xF460, 0xF461, 0xF462, 0xDBCB, 0xF463, 0xF464, 0xD8AA, 0xF465, 0xF466, 0xF467, 0xF468, 0xF469, 0xF46A, 0xF46B, 0xF46C, 0xE5F7, 0xB9ED, 0xF46D, 0xF46E, 0xF46F, 0xF470, 0xBFFD, 0xBBEA, 0xF7C9, 0xC6C7, 0xF7C8, 0xF471, 0xF7CA, 0xF7CC, 0xF7CB, 0xF472, 0xF473, 0xF474, 0xF7CD, 0xF475, 0xCEBA, 0xF476, 0xF7CE, 0xF477, 0xF478, 0xC4A7, 0xF479, 0xF47A, 0xF47B, 0xF47C, 0xF47D, 0xF47E, 0xF480, 0xF481, 0xF482, 0xF483, 0xF484, 0xF485, 0xF486, 0xF487, 0xF488, 0xF489, 0xF48A, 0xF48B, 0xF48C, 0xF48D, 0xF48E, 0xF48F, 0xF490, 0xF491, 0xF492, 0xF493, 0xF494, 0xF495, 0xF496, 0xF497, 0xF498, 0xF499, 0xF49A, 0xF49B, 0xF49C, 0xF49D, 0xF49E, 0xF49F, 0xF4A0, 0xF540, 0xF541, 0xF542, 0xF543, 0xF544, 0xF545, 0xF546, 0xF547, 0xF548, 0xF549, 0xF54A, 0xF54B, 0xF54C, 0xF54D, 0xF54E, 0xF54F, 0xF550, 0xF551, 0xF552, 0xF553, 0xF554, 0xF555, 0xF556, 0xF557, 0xF558, 0xF559, 0xF55A, 0xF55B, 0xF55C, 0xF55D, 0xF55E, 0xF55F, 0xF560, 0xF561, 0xF562, 0xF563, 0xF564, 0xF565, 0xF566, 0xF567, 0xF568, 0xF569, 0xF56A, 0xF56B, 0xF56C, 0xF56D, 0xF56E, 0xF56F, 0xF570, 0xF571, 0xF572, 0xF573, 0xF574, 0xF575, 0xF576, 0xF577, 0xF578, 0xF579, 0xF57A, 0xF57B, 0xF57C, 0xF57D, 0xF57E, 0xF580, 0xF581, 0xF582, 0xF583, 0xF584, 0xF585, 0xF586, 0xF587, 0xF588, 0xF589, 0xF58A, 0xF58B, 0xF58C, 0xF58D, 0xF58E, 0xF58F, 0xF590, 0xF591, 0xF592, 0xF593, 0xF594, 0xF595, 0xF596, 0xF597, 0xF598, 0xF599, 0xF59A, 0xF59B, 0xF59C, 0xF59D, 0xF59E, 0xF59F, 0xF5A0, 0xF640, 0xF641, 0xF642, 0xF643, 0xF644, 0xF645, 0xF646, 0xF647, 0xF648, 0xF649, 0xF64A, 0xF64B, 0xF64C, 0xF64D, 0xF64E, 0xF64F, 0xF650, 0xF651, 0xF652, 0xF653, 0xF654, 0xF655, 0xF656, 0xF657, 0xF658, 0xF659, 0xF65A, 0xF65B, 0xF65C, 0xF65D, 0xF65E, 0xF65F, 0xF660, 0xF661, 0xF662, 0xF663, 0xF664, 0xF665, 0xF666, 0xF667, 0xF668, 0xF669, 0xF66A, 0xF66B, 0xF66C, 0xF66D, 0xF66E, 0xF66F, 0xF670, 0xF671, 0xF672, 0xF673, 0xF674, 0xF675, 0xF676, 0xF677, 0xF678, 0xF679, 0xF67A, 0xF67B, 0xF67C, 0xF67D, 0xF67E, 0xF680, 0xF681, 0xF682, 0xF683, 0xF684, 0xF685, 0xF686, 0xF687, 0xF688, 0xF689, 0xF68A, 0xF68B, 0xF68C, 0xF68D, 0xF68E, 0xF68F, 0xF690, 0xF691, 0xF692, 0xF693, 0xF694, 0xF695, 0xF696, 0xF697, 0xF698, 0xF699, 0xF69A, 0xF69B, 0xF69C, 0xF69D, 0xF69E, 0xF69F, 0xF6A0, 0xF740, 0xF741, 0xF742, 0xF743, 0xF744, 0xF745, 0xF746, 0xF747, 0xF748, 0xF749, 0xF74A, 0xF74B, 0xF74C, 0xF74D, 0xF74E, 0xF74F, 0xF750, 0xF751, 0xF752, 0xF753, 0xF754, 0xF755, 0xF756, 0xF757, 0xF758, 0xF759, 0xF75A, 0xF75B, 0xF75C, 0xF75D, 0xF75E, 0xF75F, 0xF760, 0xF761, 0xF762, 0xF763, 0xF764, 0xF765, 0xF766, 0xF767, 0xF768, 0xF769, 0xF76A, 0xF76B, 0xF76C, 0xF76D, 0xF76E, 0xF76F, 0xF770, 0xF771, 0xF772, 0xF773, 0xF774, 0xF775, 0xF776, 0xF777, 0xF778, 0xF779, 0xF77A, 0xF77B, 0xF77C, 0xF77D, 0xF77E, 0xF780, 0xD3E3, 0xF781, 0xF782, 0xF6CF, 0xF783, 0xC2B3, 0xF6D0, 0xF784, 0xF785, 0xF6D1, 0xF6D2, 0xF6D3, 0xF6D4, 0xF786, 0xF787, 0xF6D6, 0xF788, 0xB1AB, 0xF6D7, 0xF789, 0xF6D8, 0xF6D9, 0xF6DA, 0xF78A, 0xF6DB, 0xF6DC, 0xF78B, 0xF78C, 0xF78D, 0xF78E, 0xF6DD, 0xF6DE, 0xCFCA, 0xF78F, 0xF6DF, 0xF6E0, 0xF6E1, 0xF6E2, 0xF6E3, 0xF6E4, 0xC0F0, 0xF6E5, 0xF6E6, 0xF6E7, 0xF6E8, 0xF6E9, 0xF790, 0xF6EA, 0xF791, 0xF6EB, 0xF6EC, 0xF792, 0xF6ED, 0xF6EE, 0xF6EF, 0xF6F0, 0xF6F1, 0xF6F2, 0xF6F3, 0xF6F4, 0xBEA8, 0xF793, 0xF6F5, 0xF6F6, 0xF6F7, 0xF6F8, 0xF794, 0xF795, 0xF796, 0xF797, 0xF798, 0xC8FA, 0xF6F9, 0xF6FA, 0xF6FB, 0xF6FC, 0xF799, 0xF79A, 0xF6FD, 0xF6FE, 0xF7A1, 0xF7A2, 0xF7A3, 0xF7A4, 0xF7A5, 0xF79B, 0xF79C, 0xF7A6, 0xF7A7, 0xF7A8, 0xB1EE, 0xF7A9, 0xF7AA, 0xF7AB, 0xF79D, 0xF79E, 0xF7AC, 0xF7AD, 0xC1DB, 0xF7AE, 0xF79F, 0xF7A0, 0xF7AF, 0xF840, 0xF841, 0xF842, 0xF843, 0xF844, 0xF845, 0xF846, 0xF847, 0xF848, 0xF849, 0xF84A, 0xF84B, 0xF84C, 0xF84D, 0xF84E, 0xF84F, 0xF850, 0xF851, 0xF852, 0xF853, 0xF854, 0xF855, 0xF856, 0xF857, 0xF858, 0xF859, 0xF85A, 0xF85B, 0xF85C, 0xF85D, 0xF85E, 0xF85F, 0xF860, 0xF861, 0xF862, 0xF863, 0xF864, 0xF865, 0xF866, 0xF867, 0xF868, 0xF869, 0xF86A, 0xF86B, 0xF86C, 0xF86D, 0xF86E, 0xF86F, 0xF870, 0xF871, 0xF872, 0xF873, 0xF874, 0xF875, 0xF876, 0xF877, 0xF878, 0xF879, 0xF87A, 0xF87B, 0xF87C, 0xF87D, 0xF87E, 0xF880, 0xF881, 0xF882, 0xF883, 0xF884, 0xF885, 0xF886, 0xF887, 0xF888, 0xF889, 0xF88A, 0xF88B, 0xF88C, 0xF88D, 0xF88E, 0xF88F, 0xF890, 0xF891, 0xF892, 0xF893, 0xF894, 0xF895, 0xF896, 0xF897, 0xF898, 0xF899, 0xF89A, 0xF89B, 0xF89C, 0xF89D, 0xF89E, 0xF89F, 0xF8A0, 0xF940, 0xF941, 0xF942, 0xF943, 0xF944, 0xF945, 0xF946, 0xF947, 0xF948, 0xF949, 0xF94A, 0xF94B, 0xF94C, 0xF94D, 0xF94E, 0xF94F, 0xF950, 0xF951, 0xF952, 0xF953, 0xF954, 0xF955, 0xF956, 0xF957, 0xF958, 0xF959, 0xF95A, 0xF95B, 0xF95C, 0xF95D, 0xF95E, 0xF95F, 0xF960, 0xF961, 0xF962, 0xF963, 0xF964, 0xF965, 0xF966, 0xF967, 0xF968, 0xF969, 0xF96A, 0xF96B, 0xF96C, 0xF96D, 0xF96E, 0xF96F, 0xF970, 0xF971, 0xF972, 0xF973, 0xF974, 0xF975, 0xF976, 0xF977, 0xF978, 0xF979, 0xF97A, 0xF97B, 0xF97C, 0xF97D, 0xF97E, 0xF980, 0xF981, 0xF982, 0xF983, 0xF984, 0xF985, 0xF986, 0xF987, 0xF988, 0xF989, 0xF98A, 0xF98B, 0xF98C, 0xF98D, 0xF98E, 0xF98F, 0xF990, 0xF991, 0xF992, 0xF993, 0xF994, 0xF995, 0xF996, 0xF997, 0xF998, 0xF999, 0xF99A, 0xF99B, 0xF99C, 0xF99D, 0xF99E, 0xF99F, 0xF9A0, 0xFA40, 0xFA41, 0xFA42, 0xFA43, 0xFA44, 0xFA45, 0xFA46, 0xFA47, 0xFA48, 0xFA49, 0xFA4A, 0xFA4B, 0xFA4C, 0xFA4D, 0xFA4E, 0xFA4F, 0xFA50, 0xFA51, 0xFA52, 0xFA53, 0xFA54, 0xFA55, 0xFA56, 0xFA57, 0xFA58, 0xFA59, 0xFA5A, 0xFA5B, 0xFA5C, 0xFA5D, 0xFA5E, 0xFA5F, 0xFA60, 0xFA61, 0xFA62, 0xFA63, 0xFA64, 0xFA65, 0xFA66, 0xFA67, 0xFA68, 0xFA69, 0xFA6A, 0xFA6B, 0xFA6C, 0xFA6D, 0xFA6E, 0xFA6F, 0xFA70, 0xFA71, 0xFA72, 0xFA73, 0xFA74, 0xFA75, 0xFA76, 0xFA77, 0xFA78, 0xFA79, 0xFA7A, 0xFA7B, 0xFA7C, 0xFA7D, 0xFA7E, 0xFA80, 0xFA81, 0xFA82, 0xFA83, 0xFA84, 0xFA85, 0xFA86, 0xFA87, 0xFA88, 0xFA89, 0xFA8A, 0xFA8B, 0xFA8C, 0xFA8D, 0xFA8E, 0xFA8F, 0xFA90, 0xFA91, 0xFA92, 0xFA93, 0xFA94, 0xFA95, 0xFA96, 0xFA97, 0xFA98, 0xFA99, 0xFA9A, 0xFA9B, 0xFA9C, 0xFA9D, 0xFA9E, 0xFA9F, 0xFAA0, 0xFB40, 0xFB41, 0xFB42, 0xFB43, 0xFB44, 0xFB45, 0xFB46, 0xFB47, 0xFB48, 0xFB49, 0xFB4A, 0xFB4B, 0xFB4C, 0xFB4D, 0xFB4E, 0xFB4F, 0xFB50, 0xFB51, 0xFB52, 0xFB53, 0xFB54, 0xFB55, 0xFB56, 0xFB57, 0xFB58, 0xFB59, 0xFB5A, 0xFB5B, 0xC4F1, 0xF0AF, 0xBCA6, 0xF0B0, 0xC3F9, 0xFB5C, 0xC5B8, 0xD1BB, 0xFB5D, 0xF0B1, 0xF0B2, 0xF0B3, 0xF0B4, 0xF0B5, 0xD1BC, 0xFB5E, 0xD1EC, 0xFB5F, 0xF0B7, 0xF0B6, 0xD4A7, 0xFB60, 0xCDD2, 0xF0B8, 0xF0BA, 0xF0B9, 0xF0BB, 0xF0BC, 0xFB61, 0xFB62, 0xB8EB, 0xF0BD, 0xBAE8, 0xFB63, 0xF0BE, 0xF0BF, 0xBEE9, 0xF0C0, 0xB6EC, 0xF0C1, 0xF0C2, 0xF0C3, 0xF0C4, 0xC8B5, 0xF0C5, 0xF0C6, 0xFB64, 0xF0C7, 0xC5F4, 0xFB65, 0xF0C8, 0xFB66, 0xFB67, 0xFB68, 0xF0C9, 0xFB69, 0xF0CA, 0xF7BD, 0xFB6A, 0xF0CB, 0xF0CC, 0xF0CD, 0xFB6B, 0xF0CE, 0xFB6C, 0xFB6D, 0xFB6E, 0xFB6F, 0xF0CF, 0xBAD7, 0xFB70, 0xF0D0, 0xF0D1, 0xF0D2, 0xF0D3, 0xF0D4, 0xF0D5, 0xF0D6, 0xF0D8, 0xFB71, 0xFB72, 0xD3A5, 0xF0D7, 0xFB73, 0xF0D9, 0xFB74, 0xFB75, 0xFB76, 0xFB77, 0xFB78, 0xFB79, 0xFB7A, 0xFB7B, 0xFB7C, 0xFB7D, 0xF5BA, 0xC2B9, 0xFB7E, 0xFB80, 0xF7E4, 0xFB81, 0xFB82, 0xFB83, 0xFB84, 0xF7E5, 0xF7E6, 0xFB85, 0xFB86, 0xF7E7, 0xFB87, 0xFB88, 0xFB89, 0xFB8A, 0xFB8B, 0xFB8C, 0xF7E8, 0xC2B4, 0xFB8D, 0xFB8E, 0xFB8F, 0xFB90, 0xFB91, 0xFB92, 0xFB93, 0xFB94, 0xFB95, 0xF7EA, 0xFB96, 0xF7EB, 0xFB97, 0xFB98, 0xFB99, 0xFB9A, 0xFB9B, 0xFB9C, 0xC2F3, 0xFB9D, 0xFB9E, 0xFB9F, 0xFBA0, 0xFC40, 0xFC41, 0xFC42, 0xFC43, 0xFC44, 0xFC45, 0xFC46, 0xFC47, 0xFC48, 0xF4F0, 0xFC49, 0xFC4A, 0xFC4B, 0xF4EF, 0xFC4C, 0xFC4D, 0xC2E9, 0xFC4E, 0xF7E1, 0xF7E2, 0xFC4F, 0xFC50, 0xFC51, 0xFC52, 0xFC53, 0xBBC6, 0xFC54, 0xFC55, 0xFC56, 0xFC57, 0xD9E4, 0xFC58, 0xFC59, 0xFC5A, 0xCAF2, 0xC0E8, 0xF0A4, 0xFC5B, 0xBADA, 0xFC5C, 0xFC5D, 0xC7AD, 0xFC5E, 0xFC5F, 0xFC60, 0xC4AC, 0xFC61, 0xFC62, 0xF7EC, 0xF7ED, 0xF7EE, 0xFC63, 0xF7F0, 0xF7EF, 0xFC64, 0xF7F1, 0xFC65, 0xFC66, 0xF7F4, 0xFC67, 0xF7F3, 0xFC68, 0xF7F2, 0xF7F5, 0xFC69, 0xFC6A, 0xFC6B, 0xFC6C, 0xF7F6, 0xFC6D, 0xFC6E, 0xFC6F, 0xFC70, 0xFC71, 0xFC72, 0xFC73, 0xFC74, 0xFC75, 0xEDE9, 0xFC76, 0xEDEA, 0xEDEB, 0xFC77, 0xF6BC, 0xFC78, 0xFC79, 0xFC7A, 0xFC7B, 0xFC7C, 0xFC7D, 0xFC7E, 0xFC80, 0xFC81, 0xFC82, 0xFC83, 0xFC84, 0xF6BD, 0xFC85, 0xF6BE, 0xB6A6, 0xFC86, 0xD8BE, 0xFC87, 0xFC88, 0xB9C4, 0xFC89, 0xFC8A, 0xFC8B, 0xD8BB, 0xFC8C, 0xDCB1, 0xFC8D, 0xFC8E, 0xFC8F, 0xFC90, 0xFC91, 0xFC92, 0xCAF3, 0xFC93, 0xF7F7, 0xFC94, 0xFC95, 0xFC96, 0xFC97, 0xFC98, 0xFC99, 0xFC9A, 0xFC9B, 0xFC9C, 0xF7F8, 0xFC9D, 0xFC9E, 0xF7F9, 0xFC9F, 0xFCA0, 0xFD40, 0xFD41, 0xFD42, 0xFD43, 0xFD44, 0xF7FB, 0xFD45, 0xF7FA, 0xFD46, 0xB1C7, 0xFD47, 0xF7FC, 0xF7FD, 0xFD48, 0xFD49, 0xFD4A, 0xFD4B, 0xFD4C, 0xF7FE, 0xFD4D, 0xFD4E, 0xFD4F, 0xFD50, 0xFD51, 0xFD52, 0xFD53, 0xFD54, 0xFD55, 0xFD56, 0xFD57, 0xC6EB, 0xECB4, 0xFD58, 0xFD59, 0xFD5A, 0xFD5B, 0xFD5C, 0xFD5D, 0xFD5E, 0xFD5F, 0xFD60, 0xFD61, 0xFD62, 0xFD63, 0xFD64, 0xFD65, 0xFD66, 0xFD67, 0xFD68, 0xFD69, 0xFD6A, 0xFD6B, 0xFD6C, 0xFD6D, 0xFD6E, 0xFD6F, 0xFD70, 0xFD71, 0xFD72, 0xFD73, 0xFD74, 0xFD75, 0xFD76, 0xFD77, 0xFD78, 0xFD79, 0xFD7A, 0xFD7B, 0xFD7C, 0xFD7D, 0xFD7E, 0xFD80, 0xFD81, 0xFD82, 0xFD83, 0xFD84, 0xFD85, 0xB3DD, 0xF6B3, 0xFD86, 0xFD87, 0xF6B4, 0xC1E4, 0xF6B5, 0xF6B6, 0xF6B7, 0xF6B8, 0xF6B9, 0xF6BA, 0xC8A3, 0xF6BB, 0xFD88, 0xFD89, 0xFD8A, 0xFD8B, 0xFD8C, 0xFD8D, 0xFD8E, 0xFD8F, 0xFD90, 0xFD91, 0xFD92, 0xFD93, 0xC1FA, 0xB9A8, 0xEDE8, 0xFD94, 0xFD95, 0xFD96, 0xB9EA, 0xD9DF, 0xFD97, 0xFD98, 0xFD99, 0xFD9A, 0xFD9B};
	
	
	
	
	
	
	
	
	//指针类型的大小
	
	//ORIGINAL LINE: #define size_p (sizeof(void *))
	//当数组满的时候，自动追加的容量
	//创建一个数组
	public static array_t array(uint size)
	{
		//创建数组结构
		//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
		//		array_t arr = (array_t)malloc(sizeof(array_t));
		//		if (arr == null)
		//		{
		//			return null;
		//		}
		//
		//		memset(arr, 0, sizeof(array_t));
		//		//创建数据体
		////C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
		//		object datas = (object)malloc((sizeof(object)) * size); //这里的话指针长度在32位和64位中是不同的
		//		if (datas == null)
		//		{
		//
		//			free(arr);
		//			return null;
		//		}
		//		//初始化
		//		arr.datas = datas;
		//		arr.size = size;
		//返回去
		//return arr;
		return null;
	}
	//销毁数组
	public static void array_free(array_t array)
	{
		if (array != null)
		{
			//删除数据指针
			if (array.datas != null)
			{
				free(array.datas);
			}
			//删除数组
			free(array);
		}
	}
	//加入元素到数组，并返回位置
	public static object array_push(array_t array, object data)
	{
		if (array == null)
		{
			return null;
		}
//		//看看数组长度是不是太小了
//		if (array.size <= array.length)
//		{
//			uint size = array.size + DefineConstants.ALLOC_SIZE; //计算追加后的大小
////C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
//			object new_data = (object)malloc((sizeof(object)) * size); //追加分配
//
//			memcpy(new_data, array.datas, (sizeof(object)) * array.size); //数据拷贝
//
//			free(array.datas); //释放原有内存
//			array.datas = new_data; //使用新内存
//			array.size = size; //更改容量
//		}
//		//追加元素
//		*(array.datas + array.length) = data;
//		array.length++;
		//返回
		return data;
	}
	//取出数组最后一个元素，如果没有返回null
	public static object array_pop(array_t array)
	{
		//空数组
		if (array.length == 0)
		{
			return null;
		}
		//取得最后一个元素
		//object data = *(array.datas + (array.length - 1));
		object data = array.datas[(int)(array.length - 1)];
		//数组长度-1
		array.length--;
		//返回
		return data;
	}
	//获取第index个元素，如果没有返回null
	public static object array_item(array_t array, uint index)
	{
		//越界了
		if (index >= array.length)
		{
			return null;
		}
		return array.datas[(int)index];
		//返回数据
		//return *(array.datas + index);
	}
	//删除第index个元素
	public static object array_remove(array_t array, uint index)
	{
		//越界了
		if (index >= array.length)
		{
			return null;
		}
		//拿到数据
		//object data = *(array.datas + index);
		object data = array.datas[(int)index];
		array.datas.Remove((int)index);
		////从后往前逐个覆盖
		//for (uint i = index; i < array.size - 1; i++)
		//{
		//	*(array.datas + i) = *(array.datas + i + 1);
		//}
		//array.length--;
		////返回
		//return data;
		return data;
	}
    
    //ORIGINAL LINE: #define println(fmt, ...) printf(fmt, ##__VA_ARGS__); printf("\n")
    
    //ORIGINAL LINE: #define logd(fmt, ...) printf("[DEBUG] "); println(fmt, ##__VA_ARGS__)
    
    
    
    
    
    
    // #include "zlib/zlib.h"
    
    
    
    
    //缓冲区的大小，1M应该够用了吧
    /*
	数据的gzip解压
	参数：
		src		原始数据
		srcLen	原始数据长度
		dst		目标数据指针，如果是空的话，则使用缓冲区，当使用缓冲区时，调用这个函数都会覆盖原有数据，因此，请做好备份
		dstLen	目标数据长度指针
	返回：
		!null	目标数据，如果使用缓冲区，则返回缓冲区的指针，否则返回dst参数指针
		null	失败
	*/
    //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 WARNING: C# has no equivalent to methods returning pointers to value types:
    //ORIGINAL LINE: byte *ungzip(byte *src, uint srcLen, byte *dst, uint *dstLen)
    public static byte[] ungzip(ref byte[] src, int srcLen, ref byte[] dst, ref uint dstLen)
    {
        //ZStream strm = new ZStream();
        //if (dst == null)
        //{
        //    strm.avail_out = DefineConstants.GZIP_BUFFER_SIZE;
        //    strm.next_out = zbuffer;
        //}
        //else
        //{
        //    strm.avail_out = (int)dstLen;
        //    strm.next_out = dst;
        //}
        //strm.zalloc = null;
        //strm.zfree = null;
        //strm.opaque = null;
        //strm.avail_in = srcLen;
        //strm.next_in = src;
        //int err = strm.inflateInit(DefineConstants.MAX_WBITS + 16);
        //int err = strm.inflateInit(DefineConstants.MAX_WBITS);
        //if (err != DefineConstants.Z_OK)
        //{
        //    strm.inflateEnd();
        //    return null;
        //}
        //err = strm.inflate(DefineConstants.Z_FINISH);
        //err = strm.inflate(GameStart.FlushMode);
        //if (err != DefineConstants.Z_STREAM_END)
        //{
        //    strm.inflateEnd();
        //    return null;
        //}
        //dstLen = (uint)strm.total_out;
        //return (dst == null) ? zbuffer : strm.next_out;
        z_stream strm2 = new z_stream();
        if (dst == null)
        {
            strm2.avail_out = DefineConstants.GZIP_BUFFER_SIZE;
            strm2.out_buf = zbuffer;
        }
        else
        {
            strm2.avail_out = (uint)dstLen;
            strm2.out_buf = dst;
        }
        strm2.avail_in = (uint)srcLen;
        strm2.in_buf = src;
 
        int err2 = Free.Ports.zLib.zlib.inflateInit2(strm2, DefineConstants.MAX_WBITS + 16);
        if (err2 != DefineConstants.Z_OK)
        {
            Free.Ports.zLib.zlib.inflateEnd(strm2);
            return null;
        }
        err2 = Free.Ports.zLib.zlib.inflate(strm2, GameStart.FlushMode);
        if (err2 != DefineConstants.Z_STREAM_END)
        {
            Free.Ports.zLib.zlib.inflateEnd(strm2);
            return null;
        }
        dstLen = (uint)strm2.total_out;
		dst = new byte[dstLen];
		memcpy( dst, 0u, strm2.out_buf, 0u, dstLen);
		return dst;
    }
    //TODO 需要考虑多线程的问题。
    // uint8 *zbuffer;
    internal static byte[] zbuffer = new byte[DefineConstants.GZIP_BUFFER_SIZE];
    //internal static byte[] zbuffer = new byte[DefineConstants.GZIP_BUFFER_SIZE];
	
	//ORIGINAL LINE: #define memSize (1024 * 1024 * 2);
	public static void on_bufferRefresh(vm_info_st vm,  ushort * bmp, uint x, uint y, uint w, uint h)
	{
		logi("-------->refreshBuffer",x,y,w,h);
        GameStart .Ins.SetTexture(vm,bmp,(int)x, (int)y, (int)w, (int)h);
    }
	public static int test_mrp()
	{
		string file = "%"+GameStart.MrpFileName+".mrp";
		//创建虚拟机
		uint v = 1024 * 1024*GameStart.Ins .memSize;
		//long v2 = uint.MaxValue;
        if (GameStart.MrpFileName.Equals ("vmrp"))
        {
            //DefineConstants.VM_STACK_SIZE *= 3;
        }
        vm = vm_create(v);
		// mem_init(vm);		 //初始化虚拟机内存
		// vm_install_func(vm); //安装函数
		vm_config_t conf = new vm_config_t();
		conf.screenWidth = 240;
		conf.screenHeight = 320;
		conf.networkId = 0;
		conf.sdcardDir = "sdcard/";
		conf.dsmDir = "mythroad/";
		conf.IMEI = "IMEI";
		conf.IMSI = "IMSI";
		conf.manufactory = "YIZHI";
		conf.type = "MRPEMU";
		//设置一下虚拟机信息
		vm_setConfig(vm, conf);
		//vm_callback_t callbacks = new vm_callback_t();
		//callbacks.onBufferRefresh = on_bufferRefresh;
		vm.callbacks .onBufferRefresh = on_bufferRefresh;
        // vm_setCallbacks(vm, callbacks);
        //初始化内存
        //println("正在初始化内存...");
        //for (uint i = 0; i < 50; i++)
        //{
        //    mem_st32(vm.cpu.mem, i * 4, i + 1);
        //}
        //psr_stval(vm.cpu.cpsr, 0x000000d3);
        //vm.cpu.cpsr.v = true;
        //启动mrp
        mr_start_dsmC(vm, ref file);
		//vm_free(vm);
		return 0;
	}
	public static int test_elf()
	{
//		//打开测试用到的elf文件
		elf_head_t head = new elf_head_t();
		//elf_sec_head_t secs=new elf_sec_head_t();
		// elf_t *elf = elf_open("/mnt/c/develop/arm/test1/test1_Data/DebugRel/test1.axf");
		elf_t elf = elf_open("/mnt/c/develop/arm/test/test");
		elf_read_head(elf,ref head);
		elf_print_head(head);
        //获取段列表
        //C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The memory management function 'malloc' has no equivalent in C#:
        elf_sec_head_t* secs = (elf_sec_head_t*)malloc(sizeof(elf_sec_head_t) * head.e_shnum);
        elf_read_sec_heads(elf, head, secs);
        for (uint i = 0; i < head.e_shnum; i++)
        {
            elf_print_sec_head(elf, head, secs, i, i == 0);
        }
        uint mem_size = (1024 * 1024 * 2);
         //10m内存
        memory_t mem = mem_create(mem_size);
		cpu_state_t st = cpu_create(mem);
        //初始化内存
        println("正在初始化内存...");
        for (uint i = 0; i < 50; i++)
        {
            mem_st32(mem, i * 4, i + 1);
        }
        //加载段
        println("正在加载程序");
        for (uint i = 0; i < head.e_shnum; i++)
        {
            elf_sec_head_t* sh = secs + i;
            //忽略无效段
            if (sh->sh_type == DefineConstants.SHT_NULL)
            {
                continue;
            }
            //读取段数据
            fseek(elf.fp, sh->sh_offset, SEEK_SET);

            //ORIGINAL LINE: byte *pos = mem->buffer + sh->sh_addr;
            byte* pos = mem.bufferP + sh->sh_addr;
            fread(pos, 1, (int)sh->sh_size, elf.fp);
        }
        st.registers[DefineConstants.r_pc] = 0x103d0; //head.e_entry;
        st.registers[DefineConstants.r_sp] = 0x303d0; //head.e_entry;
                                                      // psr_stval(&st->cpsr, 0x000000d3); //cpsr默认为d3
        psr_stval(st.cpsr, 0x60000010); //cpsr默认为d3
        println("--------------------->");
        st.registers[2] = 0x00e0;
        st.registers[3] = 0xf0;
        mem_st32(mem, 0x8004, 0xe16f1f10); //B --> 到下一条
        mem_st32(mem, 0x8008, 0xe3a00011);
        cpu_print_regs(st);
        //		while (true)
        //		{
        uint inst = cpu_fetch_inst(st);
//			Console.Write("inst: 0x{0:x8}",__VA_ARGS__);
//			
//			cpu_exec_inst(st, inst);
//			cpu_print_regs(st);
//		}
//		cpu_destory(st);
		return 0;
	}
	//static int Main(string[] args=null)
	//{
	//	return test_mrp();
	//	// return testfmt();
	//	// return test_elf();
	//}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	//检测是不是偶数
	
	
	//快速匹配条件是否满足
	
	
	//对于地址模式4，检测是否含有给定寄存器
	
	
	//针对于ldm命令来说，用来检测rn是否等于pc
	
	
	
	
	
	
	
	
	
	
	
	
	// #define borrow(result, num1) ((result) > (num1))												  //检测是否借位(都减掉一个数了结果却变大？)
	
	
	
	
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//bool check_cond(cpu_state_t st, uint inst); //条件检测
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//uint addr_mode_1(cpu_state_t st, uint inst, ref bool carry); //地址模式1
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//uint addr_mode_2(cpu_state_t st, uint inst); //地址模式2
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//uint addr_mode_3(cpu_state_t st, uint inst); //地址模式3
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//void addr_mode_4(cpu_state_t st, uint inst, ref uint start_address, ref uint end_address); //地址模式4
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int signed_sat(long val, int n, ref bool issat); //有符号数饱和处理
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//uint unsigned_sat(long val, uint max, ref bool issat); //无符号饱和处理
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_adc(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_add(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_and(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_b_bl(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_bic(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_blx_1(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_blx_2(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_brpt(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_bx(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_bxj(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_cdp(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_clz(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_cmn(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_cmp(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_cps(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_cpy(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_eor(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_ldc(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_ldm_1(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_ldm_2(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_ldm_3(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_ldr(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_ldrb(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_ldrbt(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_ldrd(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_ldrex(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_ldrh(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_ldrsb(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_ldrsh(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_ldrt(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_mcr(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_mcrr(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_mla(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_mov(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_mrc(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_mrrc(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_mrs(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_msr(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_msr(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_mul(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_mvn(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_orr(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_pkhbt(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_pkhtb(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_pld(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_qadd(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_qadd16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_qadd8(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_qaddsubx(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_qdadd(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_qdsub(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_qsub(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_qsub16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_qsub8(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_qsubaddx(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_rev(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_rev16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_revsh(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_rfe(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_rsb(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_rsc(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_sadd16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_sadd8(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_saddsubx(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_sbc(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_sel(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_setend(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_shadd16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_shadd8(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_shaddsubx(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_shsub16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_shsub8(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_shsubaddx(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_smla_x_y(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_smlad(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_smlal(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_smlal_x_y(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_smlald(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_smlaw_y(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_smlsd(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_smlsld(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_smmla(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_smmls(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_smmul(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_smuad(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_smul_x_y(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_smull(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_smulw_y(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_smusd(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_srs(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_ssat(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_ssat16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_ssub16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_ssub8(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_ssubaddx(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_stc(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_stm_1(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_stm_2(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_str(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_strb(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_strbt(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_strd(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_strex(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_strh(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_strt(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_sub(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_swi(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_swp(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_swpb(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_sxtab(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_sxtab16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_sxtah(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_sxtb(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_sxtb16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_sxth(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_teq(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_tst(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uadd16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uadd8(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uaddsubx(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uhadd16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uhadd8(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uhaddsubx(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uhsub16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uhsub8(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uhsubaddx(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_umaal(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_umlal(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_umull(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uqadd16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uqadd8(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uqaddsubx(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uqsub16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uqsub8(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uqsubaddx(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_usad8(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_usada8(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_usat(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_usat16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_usub16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_usub8(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_usubaddx(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uxtab(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uxtab16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uxtah(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uxtb(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uxtb16(cpu_state_t st, uint inst);
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//int arm_inst_uxth(cpu_state_t st, uint inst);
	//创建内存
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//memory_t mem_create(uint size);
	//销毁内存
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//void mem_destory(memory_t mem);
	//获取一个32位的数据
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//uint mem_ld32(memory_t mem, uint addr);
	//获取一个16位的数据
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//ushort mem_ld16(memory_t mem, uint addr);
	//获取一个8位的数据
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//byte mem_ld8(memory_t mem, uint addr);
	//存储一个32位的数据
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//void mem_st32(memory_t mem, uint addr, uint value);
	//存储一个16位的数据
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//void mem_st16(memory_t mem, uint addr, ushort value);
	//存储一个8位的数据
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//void mem_st8(memory_t mem, uint addr, byte value);
	//创建一个数组，指定一个容量
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//array_t array(uint size);
	//销毁数组
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//void array_free(array_t array);
	//加入元素到数组，并返回加入的元素
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//object array_push(array_t array, object data);
	//取出数组最后一个元素，如果没有返回null
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//object array_pop(array_t array);
	//获取第index个元素，如果没有返回null
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//object array_item(array_t array, uint index);
	//删除第index个元素，并返回所删除的元素
	//C++ TO C# CONVERTER CRACKED BY X-CRACKER 2017 TODO TASK: The implementation of the following method could not be found:
	//object array_remove(array_t array, uint index);
	
	
}
//[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public unsafe partial struct mr_sys_info_st
{
	/*
		网络ID
		0	移动
		1	联动GSM
		2	联通CDMA
		3	未插卡
	*/
	public uint networkID;
	public uint screen_width; //屏幕宽度
	public uint screen_height; //屏幕高度
	public uint screen_bits; //屏幕色深，24位
	public fixed byte IMEI[16 + 1];// = new byte[16 + 1]; //IMEI
	public fixed byte IMSI[16 + 1];//= new byte[16 + 1]; //IMSI
	public fixed sbyte manufactory[8 + 1];// = new string(new char[8 + 1]); //厂商名，最大7个字符，空字节填\0
	public fixed sbyte type[8 + 1];// = new string(new char[8 + 1]); //mobile type，最大7个字符，空字节填\0
	public uint ver; //SW ver
	public fixed byte spare[12 + 1]; //= new byte[12 + 1]; //备用
	public fixed sbyte sdcard_dir[DefineConstants.MAX_FILE_PATH_LEN];// = new string(new char[DefineConstants.MAX_FILE_PATH_LEN]); //SD卡目录
	public fixed sbyte dsm_dir[DefineConstants.MAX_FILE_PATH_LEN];// = new string(new char[DefineConstants.MAX_FILE_PATH_LEN]); //dsm目录，一般是mythroad啦
}
/*
mrp运行过程中的一些状态
这些状态会被装在到虚拟机中，并可以被虚拟机访问
*/
//[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public unsafe struct mr_state_t
{
	/*
	系统信息
	这个信息需在虚拟机被创建之后mrp启动之前进行配置。
	当函数表安装函数被调用时，这些信息的指针会被填写到函数表的位置，因为是指针，所以什么时候设置都可以用，只要是在mrp启动前就好。
	*/
	public mr_sys_info_st sysinfo;//= new mr_sys_info_st();
	/*
	从mrp文件中读取到内容+8的数据(也就是程序指令部分)，将该位置的内存指针存放在这里。
	也就是说，这个函数是一个入口函数。
	这个函数会在程序装在到内存之后进行设置。
	原型: uint32 mr_c_function_load(uint32 code);
	*/
	public uint mr_c_function_load;
	/*
	这里存放的是mr_c_function_st结构的指针，当mr_c_function_new被调用时会分配该结构，并将指针放在此处。
	*/
	public uint mr_c_function_P;
	public uint mr_c_function_P_Len; //也就是上面那个结构的长度啦。
	/*
	mr_c_function函数的指针
	这个函数会在SWI_MR_C_FUNCTION_NEW中断发生时传递过来。
	*/
	public uint mr_c_function;
	/*
	注册固化列表，当调用mr_registerAPP函数时会往这里面填写
	在初始化mr函数表的时候回被填写到c_internal_table的第0个位置
	*/
	public fixed uint mr_m0_files[DefineConstants.MRST_MAX_0FILES];// = new uint[DefineConstants.vm.mem.mr_state_MAX_0FILES];
	/*
	这里面存储的是一些状态吧，有些不是太明白
	*/
	public fixed uint mr_c_internal_table[DefineConstants.MRST_INTERNAL_TABLE_MAX];// = new uint[DefineConstants.vm.mem.mr_state_INTERNAL_TABLE_MAX];
	public fixed uint mr_c_port_table[DefineConstants.MRST_INTERNAL_TABLE_MAX];// = new uint[DefineConstants.vm.mem.mr_state_CPORT_TABLE_MAX];
	/*
	内存状态
	在调用内存初始化函数的时候回填充此结构，并将此结构中的值填充到函数表的特定位置。
	*/
	public mr_mem_state_t mem_state;//= new mr_mem_state_t();
	/*
	包名称，在调用start_dsmX函数时填入，同样的，这两个名称也会映射到mr函数表中
	*/
	//public string pack_filename = new string(new char[DefineConstants.MR_FILE_MAX_LEN]);
	//public string old_pack_filename = new string(new char[DefineConstants.MR_FILE_MAX_LEN]);
	//public string start_filename = new string(new char[DefineConstants.MR_FILE_MAX_LEN]);
	//public string old_start_filename = new string(new char[DefineConstants.MR_FILE_MAX_LEN]);
	//public string start_file_parameter = new string(new char[DefineConstants.MR_FILE_MAX_LEN]);
	//public string entry = new string(new char[DefineConstants.MR_FILE_MAX_LEN]);
	public fixed sbyte pack_filename[DefineConstants.MR_FILE_MAX_LEN];// = new string(new char[DefineConstants.MR_FILE_MAX_LEN]);
	public fixed sbyte old_pack_filename[DefineConstants.MR_FILE_MAX_LEN];//= new string(new char[DefineConstants.MR_FILE_MAX_LEN]);
	public fixed sbyte start_filename[DefineConstants.MR_FILE_MAX_LEN];//= new string(new char[DefineConstants.MR_FILE_MAX_LEN]);
	public fixed sbyte old_start_filename[DefineConstants.MR_FILE_MAX_LEN];// = new string(new char[DefineConstants.MR_FILE_MAX_LEN]);
	public fixed sbyte start_file_parameter[DefineConstants.MR_FILE_MAX_LEN];// = new string(new char[DefineConstants.MR_FILE_MAX_LEN]);
	//[MarshalAs(UnmanagedType.ByValArray, SizeConst = DefineConstants.MR_FILE_MAX_LEN)]
	//public char[] entry;// = new string(new char[DefineConstants.MR_FILE_MAX_LEN]);
	public fixed sbyte entry[DefineConstants.MR_FILE_MAX_LEN];
	/*应用信息，在启动mrp的时候回填充此结构*/
	public mrc_appInfo_st appInfo;// = new mrc_appInfo_st();
	public uint mr_ram_file;
	public uint mr_ram_file_len;
	//public mr_bitmap_t[] mr_bitmap= Arrays.InitializeWithDefaultInstances<mr_bitmap_t>(DefineConstants.BITMAPMAX + 1);
	//public mr_tile_t[] mr_tile = Arrays.InitializeWithDefaultInstances<mr_tile_t>(DefineConstants.TILEMAX);
	//public fixed uint mr_map[DefineConstants.TILEMAX];// = new uint[DefineConstants.TILEMAX];
	//public mr_sound_t[] mr_sound = Arrays.InitializeWithDefaultInstances<mr_sound_t>(DefineConstants.SOUNDMAX);
	//public mr_sprite_t[] mr_sprite = Arrays.InitializeWithDefaultInstances<mr_sprite_t>(DefineConstants.SPRITEMAX);
	//[MarshalAs(UnmanagedType.ByValArray, SizeConst = DefineConstants.BITMAPMAX + 1)]
	//[FixedBuffer(typeof(mr_bitmap_t), DefineConstants.BITMAPMAX + 1)]
	//public mr_bitmap_t[] mr_bitmaps => new mr_bitmap_t[DefineConstants.BITMAPMAX + 1];
	public mr_bitmap_t mr_bitmap;
	public mr_bitmap_t mr_bitmap2;
	public mr_bitmap_t mr_bitmap3;
	public mr_bitmap_t mr_bitmap4;
	public mr_bitmap_t mr_bitmap5;
	public mr_bitmap_t mr_bitmap6;
	public mr_bitmap_t mr_bitmap7;
	public mr_bitmap_t mr_bitmap9;
	public mr_bitmap_t mr_bitmap10;
	public mr_bitmap_t mr_bitmap12;
	public mr_bitmap_t mr_bitmap13;
	public mr_bitmap_t mr_bitmap14;
	public mr_bitmap_t mr_bitmap15;
	public mr_bitmap_t mr_bitmap16;
	public mr_bitmap_t mr_bitmap18;
	public mr_bitmap_t mr_bitmap19;
	public mr_bitmap_t mr_bitmap20;
	public mr_bitmap_t mr_bitmap21;
	public mr_bitmap_t mr_bitmap22;
	public mr_bitmap_t mr_bitmap23;
	public mr_bitmap_t mr_bitmap24;
	public mr_bitmap_t mr_bitmap25;
	public mr_bitmap_t mr_bitmap26;
	public mr_bitmap_t mr_bitmap27;
	public mr_bitmap_t mr_bitmap28;
	public mr_bitmap_t mr_bitmap29;
	public mr_bitmap_t mr_bitmap30;
	public mr_bitmap_t mr_bitmap31;
    // = Arrays.InitializeWithDefaultInstances<mr_bitmap_t>(DefineConstants.BITMAPMAX + 1);
    //[MarshalAs(UnmanagedType.ByValArray, SizeConst = DefineConstants.TILEMAX)]
    public  mr_tile_t mr_tile;
	public  mr_tile_t mr_tile2;
	public  mr_tile_t mr_tile3;
	//= Arrays.InitializeWithDefaultInstances<mr_tile_t>(DefineConstants.TILEMAX);
	//[MarshalAs(UnmanagedType.ByValArray, SizeConst = DefineConstants.TILEMAX)]
	//public uint[] mr_map;// = new uint[DefineConstants.TILEMAX];
	public fixed uint mr_map[DefineConstants.TILEMAX];
	//[MarshalAs(UnmanagedType.ByValArray, SizeConst = DefineConstants.SOUNDMAX)]
	public mr_sound_t mr_sound;
	public mr_sound_t mr_sound2;
	public mr_sound_t mr_sound3;
	public mr_sound_t mr_sound4;
	public mr_sound_t mr_sound5;
	// = Arrays.InitializeWithDefaultInstances<mr_sound_t>(DefineConstants.SOUNDMAX);
	//[MarshalAs(UnmanagedType.ByValArray, SizeConst = DefineConstants.SPRITEMAX)]
	public mr_sprite_t mr_sprite;
	public mr_sprite_t mr_sprite2;
	public mr_sprite_t mr_sprite3;
	public mr_sprite_t mr_sprite4;
	public mr_sprite_t mr_sprite5;
	public mr_sprite_t mr_sprite6;
	public mr_sprite_t mr_sprite7;
	public mr_sprite_t mr_sprite8;
	public mr_sprite_t mr_sprite9;
	public mr_sprite_t mr_sprite10;
	// = Arrays.InitializeWithDefaultInstances<mr_sprite_t>(DefineConstants.SPRITEMAX);
	/*
	下面这几个函数是由mrp通过testCom注册的
	*/
	public uint mr_event_function; //原型： (int32 code, int32 param0, int32 param1) -> int32
	public uint mr_timer_function; //原型： (void) -> int32
	public uint mr_stop_function; //原型： (void) -> int32
	public uint mr_pauseApp_function; //原型： (void) -> int32
	public uint mr_resumeApp_function; //原型： (void) -> int32
	public mr_com_event_t com_param_event;//= new mr_com_event_t(); //testComC-事件处理参数
	//一些标志状态
	public sbyte mr_soundOn;
	public sbyte mr_shakeOn;
	public int bi;
	public uint vm_state; //mrp_State*
	public int mr_state;
	public uint mr_timer_p; //void **
	public int mr_timer_state;
	public int mr_timer_run_without_pause;
	public byte mr_sms_return_flag;
	public int mr_sms_return_val;
	public uint mr_sms_cfg_buf; //实际类型uint8*
}
//[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public unsafe struct vm_mem_map_st
{
	/*
		虚拟机实际的地址
		当虚拟机完成创建后，会将malloc得到的地址放在这里
		通过这个地址，就能反向得到虚拟机信息
	*/
	public uint vmaddr;
	/*程序栈空间*/
	public fixed byte stack[DefineConstants.VM_STACK_SIZE]; //= new byte[DefineConstants.VM_STACK_SIZE];//20480 16596
                                                            /*显存*/
    public fixed ushort video[DefineConstants.VM_MAX_PIXELS];// = new ushort[DefineConstants.VM_MAX_PIXELS];
															 //public ushort* videoP;
	/*
	字体信息，必要的时候会自动加载，虚拟机释放时自动释放。
	*/
	public font_info_st font;
	/*
	这里面存储的是一些指针，在mr_func_tab中会遇到一些指向指针的指针，把那些部分存在这里
	为了简单，也分配和mr_func_tab相等大小的空间，这样也就可以一一对应了。
	*/
	//[MarshalAs(UnmanagedType.ByValArray, SizeConst =200)]
	public fixed uint mr_func_tab_p[200];//= new uint[200];
	/*mr函数表，这里存的是函数具体的地址*/
	//[MarshalAs(UnmanagedType.ByValArray, SizeConst = 200)]
	public fixed uint mr_func_tab[200];// = new uint[200];
	/*
	这里存放的mr函数列表，通过mr_func_tab中的来指定。
	这里面的函数只需发起一个系统调用即可，具体的实现是交给实体机实现的。
		每条指令都是一个32位的数字，使用两条指令来处理，一条中断，一条返回
	*/
	//[MarshalAs(UnmanagedType.ByValArray, SizeConst = 400)]
	public fixed uint mr_funcs[2 * 200]; //= new uint[2 * 200];
	/*
	mrp运行时的一些状态
	*/
	public mr_state_t mr_state;// = new mr_state_t();
	/*堆内存开始地址*/
	//public fixed byte heap[1];// = new byte[0];
}
